Goo*_*bot 5 mysql innodb performance mysql-5.5 update query-performance
我UPDATE在管理员级别安排了大量查询,并且由于它们是UPDATE带有多个JOINs 的大量 s,因此消耗了大量资源。
我不希望他们在执行如此繁重的UPDATE任务时阻止最终用户执行基本任务。
是LOW_PRIORITY为了这个目的吗?或者我应该遵循另一种策略?
UPDATE LOW_PRIORITY ....
Run Code Online (Sandbox Code Playgroud)
请注意,我的引擎是innoDB.
LOW_PRIORITY不起作用有两个原因。
HIGH_PRIORITY读取请求。如果您的服务器恰好处于恒定负载下,甚至可能会发生更新根本不执行的情况。您可以做的是,首先检查SELECT(我的意思是将您重写UPDATE为 a SELECT),您的查询是否高性能,它使用索引来查找要更新的行(检查EXPLAIN)并在必要时添加适当的索引。
然后,当您执行UPDATE语句时,将它们打包到事务中。
InnoDB 引擎将有关当前事务的信息记录在内存缓冲区中。当事务提交或回滚时,日志缓冲区将刷新到磁盘。如果日志缓冲区很小,它可能会在事务结束之前填满,从而需要在知道事务结果之前刷新日志文件。对于已提交的事务,这会导致多个磁盘操作,而不是一次。对于回滚事务,它会导致在缓冲区较大时根本不需要进行写入。要设置日志缓冲区的大小,请调整 my.cnf (Linux) 或 my.ini (Windows) 中的值(如果尚未设置,则添加它)
[mysqld]
innodb_log_buffer_size = 8M
Run Code Online (Sandbox Code Playgroud)
默认值为 1MB。典型值范围从 1MB 到 8MB。大于 8MB 的值没有任何好处。
如果这还不够,您可以使用批量更新行,LIMIT并随着时间的推移分散更新语句,以便行锁不会保持太长时间。
祝你好运。
| 归档时间: |
|
| 查看次数: |
7282 次 |
| 最近记录: |