马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
事务处理对长期统计信息自动收集的影响
1. 长期化统计信息
长期统计信息将统计信息存储到磁盘,使它们在服务器重启后保持不变,优化器更有大概在查询时做出一致的选择,从而进步执行计划的稳固性。
在innodb_stats_persistent=ON(默认值)或表定义利用 stats_persistent=1时,优化器统计信息会长期化保存。
长期统计信息存储在 mysql.innodb_table_stats 和 mysql.innodb_index_stats 表中,last_update 列可以看到前次更新统计信息的时间。
系统变量innodb_stats_auto_recalc(默认ON)控制表行更改凌驾10%时,是否自动计算统计信息。也可以通过创建或更改表时指定stats_auto_recalc子句为单个表配置自动统计重新计算。
由于自动统计信息收集是一个后台线程,其处理过程与DML操作是异步的,在DML操作凌驾 10% 的表后,大概不会立即重新计算统计信息。在某些环境下,统计数据重新计算大概会延迟几秒钟。如果立即需要最新的统计信息,执行 ANALYZE TABLE 以启动统计信息的同步计算。
事务的 commit 和 rollback 会影响统计信息的自动收集么?通过下面测试,可以回答这问题。
2. 测试commit和rollback对长期统计信息收集的影响
测试环境的系统变量值:- greatsql> SHOW GLOBAL VARIABLES LIKE 'innodb_stats%';
- +--------------------------------------+-------------+
- | Variable_name | Value |
- +--------------------------------------+-------------+
- | innodb_stats_auto_recalc | ON |
- | innodb_stats_include_delete_marked | OFF |
- | innodb_stats_method | nulls_equal |
- | innodb_stats_on_metadata | OFF |
- | innodb_stats_persistent | ON |
- | innodb_stats_persistent_sample_pages | 20 |
- | innodb_stats_transient_sample_pages | 8 |
- +--------------------------------------+-------------+
复制代码 2.1 INSERT 操作
2.2 DELETE 操作
3. 总结
- 数据量变化大(凌驾10%)的DML操作会导致2次统计信息收集,一次是DML开始时,一次是DML完成约10秒后。
- DML操作是否COMMIT提交,不影响统计信息收集。
- DML操作的rollback回滚,大概造成统计信息与表数据不一致。当大数据DML操作回滚后,可以执行ANALYZE TABLE重新收集表的统计信息。
Enjoy GreatSQL
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |