dat*_*789 8 mysql myisam performance shutdown
我正在寻求帮助以了解执行以下命令行时会发生什么:
root@prodn$ service mysqld stop
Run Code Online (Sandbox Code Playgroud)
是的,它会关闭 MySQL 服务器,因此在服务再次启动之前无法再访问它。但是,更具体地说,服务停止时是否还会发生其他情况?请原谅我的新手,但是当mysqld重新启动时,是否意味着日志已刷新、一些内存已释放、缓存已清空等?
我问的原因如下:
我们的数据仓库 DB 是 MySQL DB,在过去的 4 个月中,平均需要 8.5 小时。
上周三,我已经停止了 mysql 服务,然后在 30 分钟后重新启动了它。从那时起,我开始注意到整体性能的巨大改进——SELECT/INSERT/UPDATE/DELETE 过程更加高效。DW 以相同数量的数据行提前近 4 小时完成
然而,随着时间的流逝,15-20 分钟不知何故被添加到完成时间。所以,我怀疑我可能必须每周重新启动服务。
这种行为有解释吗?我不知道还有哪些其他问题是相关的,但是知道mysqld服务重新启动时会发生什么会很棒。
任何人都可以对此有所了解吗?
当您发出 时service mysql stop,会发生很多事情,而不仅仅是切断数据库连接。@ethrbunny 评论中的链接已经解释了发生的情况。
我想重点关注一个特定的方面:InnoDB 缓冲池。InnoDB必须刷新InnoDB缓冲池的脏页。如果您想知道多少,请在关机前运行以下命令:
SELECT CONCAT(dpbytes/power(1024,expo),' ',SUBSTR(units,expo*2+1,2)) DirtyPages FROM
(SELECT dpbytes,FLOOR(LOG(dpbytes)/LOG(1024)) expo FROM
(SELECT dirty_pages*page_size dpbytes FROM
(SELECT VARIABLE_VALUE dirty_pages FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_buffer_pool_pages_dirty') AAA,
(SELECT VARIABLE_VALUE page_size FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_page_size') BBB) AA) A,(SELECT ' BKBMBGBTB' units) B;
Run Code Online (Sandbox Code Playgroud)
这将告诉您需要从 InnoDB 缓冲池中刷新多少数据。
请记住,InnoDB 在系统表空间(文件ibdata1)中有许多移动部分。单击此处查看整个 InnoDB 基础架构的图示。
某些事务信息的写入方式是在运行时执行崩溃恢复service mysql start。
您可以通过运行此命令从 ibdata1 和事务日志 ( ib_logfile0, )刷新所有数据并干净地提交所有事务ib_logfile1
SET GLOBAL innodb_fast_shutdown = 0;
Run Code Online (Sandbox Code Playgroud)
跑步前
service mysql stop
Run Code Online (Sandbox Code Playgroud)
试一试 !!!
由于您将 MyISAM 作为主存储引擎,因此唯一发生的事情是将索引更改刷新到所有.MYI有待更改的文件。
我还建议您下次关闭 mysqld 时,在另一个会话中预先运行它:
tail -f /var/log/mysqld.log
Run Code Online (Sandbox Code Playgroud)
并观察经过的消息,它会告诉您 mysqld 对任何存储引擎正在做什么。如果你绝对没有使用 InnoDB 表,那么你应该考虑禁用 InnoDB
[mysqld]
skip-innodb
Run Code Online (Sandbox Code Playgroud)
因为这将使启动更快,并且可能更快关闭。
| 归档时间: |
|
| 查看次数: |
919 次 |
| 最近记录: |