云服务器内容精选

  • 开启DDL快速超时 表1 参数说明 参数名称 级别 描述 rds_ddl_lock_wait_timeout Global,Session 控制当前会话或者全局的DDL超时时间。 时间单位为秒,范围为1秒到31536000,默认值为31536000,相当于不开启。 对于DDL的等锁超时,其真实超时时间是lock_wait_timeout和rds_ddl_lock_wait_timeout的最小值。 对于DDL过程中InnoDB层的加表锁超时(行锁不在该考虑范围),其真实超时时间是innodb_lock_wait_timeout和rds_ddl_lock_wait_timeout)的最小值。
  • 使用示例 首先开启一个客户端,执行加锁操作,示例如下。 图1 加锁操作 通过如下命令,查看DDL快速超时功能的状态。 show variables like "%rds_ddl_lock_wait_timeout%"; 图2 查看状态 如上图所示,查询到“rds_ddl_lock_wait_timeout”的值是“31536000”,此时是默认值,相当于不开启DDL快速超时功能。如果此时等锁,就会卡在这里。 如果需要开启DDL快速超时功能,可以将这个值设置为预期值,操作请参考3。 设置参数。 执行如下命令,设置“rds_ddl_lock_wait_timeout”参数值。 set rds_ddl_lock_wait_timeout=1; 图3 设置参数 然后执行如下创建索引命令,发现DDL操作会快速超时失败,符合预期。 alter table lzk.t_lzk drop index indexa; 图4 执行创建索引命令
  • 性能测试 GaussDB (for MySQL)执行耗时2.7秒完成,只需要扫描约61万行数据。相比MySQL 8.0 社区版本执行耗时约186秒,扫描数据量4400万,执行效率大大提升。 如下示例中,对7个表连接后的结果做DISTINCT,使用MySQL 8.0.30社区版本,执行耗时186秒,扫描了约4400万行数据。 GaussDB(for MySQL)执行耗时2.7秒,扫描约61万行数据。 查询语句: select distinct ed.code,et.* from ele_template et left join ele_template_tenant ett on ett.template_id = et.id left join ele_relation tm on tm.tom_id = et.id and tm.jerry_type = 'chapter' left join ele_relation mv on mv.tom_id = tm.jerry_id and mv.jerry_type = 'variable' left join ele_relation cv on cv.jerry_id = mv.jerry_id and cv.tom_type = 'column' left join ele_doc_column edc on edc.id = cv.tom_id left join ele_doc ed on ed.id = edc.doc_id where ett.uctenantid = 'mmo0l3f8' and ed.code = 'contract' and et.billtype = 'contract' order by ifnull(et.utime,et.ctime) desc limit 0,10;
  • 开启多表连接DISTINCT优化 表1 参数说明 参数名称 级别 描述 rds_nlj_distinct_optimize Global,Session DISTINCT优化特性开关,默认值为OFF。 ON:开启DISTINCT优化特性。 OFF:关闭DISTINCT优化特性。 除了使用上述开关来控制优化特性生效或者不生效,还可以使用HINT来实现,语法如下。 开启DISTINCT优化特性 /*+ SET_VAR(rds_nlj_distinct_optimize=ON) */ 关闭 DISTINCT 优化特性 /*+ SET_VAR(rds_nlj_distinct_optimize=OFF) */
  • 开启DDL快速超时 表1 参数说明 参数名称 级别 描述 rds_ddl_lock_wait_timeout Global,Session 控制当前会话或者全局的DDL超时时间。 时间单位为秒,范围为1秒到31536000,默认值为31536000,相当于不开启。 对于DDL的等锁超时,其真实超时时间是lock_wait_timeout和rds_ddl_lock_wait_timeout的最小值。 对于DDL过程中InnoDB层的加表锁超时(行锁不在该考虑范围),其真实超时时间是innodb_lock_wait_timeout和rds_ddl_lock_wait_timeout)的最小值。
  • 使用示例 首先开启一个客户端,执行加锁操作,示例如下。 图1 加锁操作 通过如下命令,查看DDL快速超时功能的状态。 show variables like "%rds_ddl_lock_wait_timeout%"; 图2 查看状态 如上图所示,查询到“rds_ddl_lock_wait_timeout”的值是“31536000”,此时是默认值,相当于不开启DDL快速超时功能。如果此时等锁,就会卡在这里。 如果需要开启DDL快速超时功能,可以将这个值设置为预期值,操作请参考3。 设置参数。 执行如下命令,设置“rds_ddl_lock_wait_timeout”参数值。 set rds_ddl_lock_wait_timeout=1; 图3 设置参数 然后执行如下创建索引命令,发现DDL操作会快速超时失败,符合预期。 alter table lzk.t_lzk drop index indexa; 图4 执行创建索引命令