在SQL语言中,DDL(数据定义语言)用于定义数据库中的表、视图、索引等对象,包括模式DDL、子模式DDL和内模式DDL。
1. 模式DDL:用于定义整个数据库的结构,包括数据库名称、表空间、用户、角色等。例如:
CREATE DATABASE my_database
2. 子模式DDL:用于定义一个用户或一组用户的数据结构,包括表、视图、索引等。例如:
CREATE TABLE my_table (
id INT PRIMARY KEY,
name VARCHAR(50)
)
3. 内模式DDL:用于定义数据库管理系统(DBMS)内部的数据结构,如数据字典、系统表等。例如:
CREATE TABLE sys_tables (
table_name VARCHAR(50),
column_name VARCHAR(50),
data_type VARCHAR(50)
)
谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的 *** 作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很比较高,下一步,问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML *** 作在slave实施。DML和DDL的IO *** 作是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lock争用,由于Slave_SQL_Running也是单线程的,所以一个DDL卡主了,需要执行10分钟,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延时。有朋友会问:“主库上那个相同的DDL也需要执行10分,为什么slave会延时?”,答案是master可以并发,Slave_SQL_Running线程却不可以。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)