simbiat / optimize-tables
数据库中优化表格的库。
2.1.11+20240616
2024-06-16 08:54 UTC
Requires
- php: ^8.3
- ext-mbstring: *
- simbiat/database: ^2
- dev-master
- 2.1.11+20240616
- 2.1.10+20240510
- 2.1.9+20240502
- 2.1.8+20240408
- 2.1.7+20221010
- 2.1.6+20211228
- 2.1.5+20211227
- 2.1.4+20210601
- 2.1.3+20210525
- 2.1.2+20210429
- 2.1.1+20210428
- 2.1.0+20210424
- 2.0.3+20210415
- 2.0.2+20210314
- 2.0.1+20210311
- 2.0.0+20210310
- 1.0.3+20201130
- 1.0.2+20200905
- 1.0.1+20200406
- 1.0.0+20200405
This package is auto-updated.
Last update: 2024-09-13 08:40:18 UTC
README
这个库的开发是为了允许批量优化MySQL(MariaDB和,可能还有其他分支)中的表格。虽然MS SQL有维护计划向导,但MySQL没有类似的东西。
优点
有人可能会认为简单地获取表格列表并对它们运行OPTIMIZE就足够了,但事实上,事情并没有那么简单。
- 并非所有表格都支持OPTIMIZE。
- 有一些特殊参数可能会在某些情况下提高OPTIMIZE的结果。
- 某些表格也可能从CHECK和REPAIR命令中受益。实际上,定期运行CHECK以避免表格潜在损坏是有用的。
- ANALYZE也是一个非常有用的命令,允许更新MySQL统计信息,这可能会改善某些SELECT。
- MariaDB 10.4+和MySQL 8.0+也支持直方图,在某些情况下可以提高SELECT,比如某个列没有索引。
- 尽管这些命令非常有用,但在某些情况下,你可能不需要运行它们,尤其是在大型表格上,因为它们可能需要相当长的时间才能完成。最简单的情况:自从上次运行OPTIMIZE以来没有或只有很少的变化。
这个库旨在以尽可能智能的方式涵盖这些要点。有关详细信息,请参阅此README的用法部分或代码中的注释。
要求
- SimbiatDB
- MySQL或MariaDB
用法
要使用此库,您需要通过SimbiatDB库与您的数据库建立连接,然后调用此
(new \Simbiat\optimizeTables)->analyze('schema');
输出将如下所示
array ( 'bic__bik_swif' => array ( 'TABLE_NAME' => 'bic__bik_swif', 'ENGINE' => 'InnoDB', 'ROW_FORMAT' => 'Compressed', 'TABLE_ROWS' => '387', 'DATA_LENGTH' => '24576', 'INDEX_LENGTH' => '8192', 'DATA_FREE' => '0', 'TOTAL_LENGTH' => '32768', 'FRAGMENTATION' => '0.0000', 'FULLTEXT' => '0', 'TO_COMPRESS' => false, 'TO_ANALYZE' => true, 'TO_CHECK' => true, 'TO_HISTOGRAM' => true, 'TO_OPTIMIZE' => false, 'TO_REPAIR' => false, 'COMMANDS' => array ( 0 => 'SET @@SESSION.old_alter_table=false;', 1 => 'SET @@SESSION.alter_algorithm=\'INPLACE\';', 2 => 'SET @@GLOBAL.innodb_defragment=true;', 3 => 'CHECK TABLE `simbiatr_simbiat`.`bic__bik_swif` FOR UPGRADE EXTENDED;', 4 => 'ANALYZE TABLE `simbiatr_simbiat`.`bic__bik_swif`;', 5 => 'ANALYZE TABLE `simbiatr_simbiat`.`bic__bik_swif` PERSISTENT FOR ALL;', 6 => 'SET @@SESSION.old_alter_table=DEFAULT;', 7 => 'SET @@SESSION.alter_algorithm=DEFAULT;', 8 => 'SET @@GLOBAL.innodb_defragment=DEFAULT;', 9 => 'SET @@GLOBAL.innodb_optimize_fulltext_only=DEFAULT;', ), ), )
schema
表示您想要分析的数据库/模式名称。此命令将显示表格列表(作为一个数组),其中包含一些统计信息和每个表格可以/应该运行的优化命令列表。在此之后,您可以手动运行它们,如果您想有一些控制权的话。或者,如果您想将库用于cron
或其他调度程序,您可以运行此
(new \Simbiat\optimizeTables)->optimize('schema');
这将分析表格并运行建议的命令。函数的结果(默认情况下)将是一个日志条目的数组,数组键是UNIX微时间戳
array ( 1586091446410816 => 'Getting list of tables...', 1586091449185271 => 'Attempting to enable maintenance mode using \'UPDATE `simbiatr_simbiat`.`settings` SET value = true WHERE `settings`.`setting` = \'maintenance\';\'...', 1586091449185567 => 'Maintenance mode enabled.', 1586091449185579 => 'Updating settings for optimization...', 1586091449185584 => 'Attempting to update setting \'SET @@SESSION.old_alter_table=false;\'...', 1586091449185704 => 'Successfully updated setting.', 1586091449185716 => 'Attempting to update setting \'SET @@SESSION.alter_algorithm=\'INPLACE\';\'...', 1586091449185839 => 'Successfully updated setting.', 1586091449185850 => 'Attempting to update setting \'SET @@GLOBAL.innodb_defragment=true;\'...', 1586091449186018 => 'Successfully updated setting.', 1586091451043050 => 'Checking `bic__bik_swif`...', 1586091451043385 => 'Successfully checked `bic__bik_swif`.', 1586091451043407 => 'Analyzing `bic__bik_swif`...', 1586091451046106 => 'Successfully analyzed `bic__bik_swif`.', 1586091451046131 => 'Creating histograms for `bic__bik_swif`...', 1586091451060711 => 'Successfully created histograms for `bic__bik_swif`.', 1586091762231919 => 'Reverting settings after optimization...', 1586091762231934 => 'Attempting to update setting \'SET @@SESSION.old_alter_table=DEFAULT;\'...', 1586091762232198 => 'Successfully updated setting.', 1586091762232225 => 'Attempting to update setting \'SET @@SESSION.alter_algorithm=DEFAULT;\'...', 1586091762232435 => 'Successfully updated setting.', 1586091762232462 => 'Attempting to update setting \'SET @@GLOBAL.innodb_defragment=DEFAULT;\'...', 1586091762232675 => 'Successfully updated setting.', 1586091762232702 => 'Attempting to update setting \'SET @@GLOBAL.innodb_optimize_fulltext_only=DEFAULT;\'...', 1586091762232911 => 'Successfully updated setting.', 1586091762232956 => 'Attempting to disable maintenance mode using \'UPDATE `simbiatr_simbiat`.`settings` SET value = true WHERE `settings`.`setting` = \'maintenance\';\'...', 1586091762237817 => 'Maintenance mode disabled.', )
这还会创建一个包含更多统计信息的tables.json
文件,其外观如下所示
{ "logs": { "1586090907695229": "Getting list of tables...", "1586090910393167": "No tables to process were returned. Skipping..." }, "before": { "bic__bik_swif": { "TABLE_NAME": "bic__bik_swif", "ENGINE": "InnoDB", "ROW_FORMAT": "Compressed", "TABLE_ROWS": "387", "DATA_LENGTH": "24576", "INDEX_LENGTH": "8192", "DATA_FREE": "0", "TOTAL_LENGTH": "32768", "FRAGMENTATION": "0.0000", "FULLTEXT": "0", "TO_COMPRESS": false, "TO_ANALYZE": true, "TO_CHECK": true, "TO_HISTOGRAM": true, "TO_OPTIMIZE": false, "TO_REPAIR": false, "CHECK_DATE": 1586078961, "CHECK_TIME": 224, "ANALYZE_DATE": 1586078961, "ANALYZE_TIME": 2087, "HISTOGRAM_DATE": 1586078961, "HISTOGRAM_TIME": 13604 } }, "after": { "bic__bik_swif": { "TABLE_NAME": "bic__bik_swif", "ENGINE": "InnoDB", "ROW_FORMAT": "Compressed", "TABLE_ROWS": "387", "DATA_LENGTH": "24576", "INDEX_LENGTH": "8192", "DATA_FREE": "0", "TOTAL_LENGTH": "32768", "FRAGMENTATION": "0.0000", "FULLTEXT": "0", "TO_COMPRESS": false, "TO_ANALYZE": true, "TO_CHECK": true, "TO_HISTOGRAM": true, "TO_OPTIMIZE": false, "TO_REPAIR": false, "CHECK_DATE": 1586078961, "ANALYZE_DATE": 1586078961, "HISTOGRAM_DATE": 1586078961 } } }
还有从上次运行获取统计信息的方法
(new \Simbiat\optimizeTables)->showStats();
这将显示所有已被压缩或大小统计信息有变化的表格。
如果您想获取这些统计信息而不是日志,您可以运行此
(new \Simbiat\optimizeTables)->optimize('schema', true);
如果您想使用常规布尔值,可以发送一个额外的true
(new \Simbiat\optimizeTables)->optimize('schema', true, true);
就是这样 - 容易使用。还有一些设置,可以让您对optimize()
所执行的操作有更多的控制。
设置
所有设置都可以链接在一起。要检查当前设置,可以在函数名称中将set
替换为get
,并移除实际设置值的参数。