我们有30到40个不同的Python和PHP项目,每天在MySQL DB中更新,插入和选择超过100万行数据。
目前我们在表中使用InnoDB Engine。
问题:当几乎所有项目都在工作且在DB中处理大量查询时,我们在MySQL中达到了顶峰。主要查询对于完成ASAP(高优先级)非常重要,查询可以等待主查询完成(优先级较低)。 但是当他们进入MySQL并发时,它会导致主要查询等待优先级较低的查询完成。
问题:
在执行主查询之前是否有可能释放表中的所有锁(这样他们可以尽快完成)?或者如果有帮助就创建锁?
我们可以在自动启动执行主查询时暂停优先级较低的查询吗?
在查询帮助中可以使用HIGH_PRIORITY和LOW_PRIORITY吗?
MySQL中是否有一些可以提供帮助的配置?
可以将表更改为MyISAM或其他数据库引擎吗?
让我知道你的想法和想法。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果没有锁定查询,很难给出明确的答案。 如果你可以添加它们会更有用。 你可以研究几件事: 查找锁定语句,例如“select for update”,“insert on conflict update”等... - 很多时候最好在应用程序端捕获异常,然后让db做额外的工作。
读并发:可能是“读取已提交”对您来说足够了,并且它需要更少的锁。
如果您根据使用情况拥有复制专用实例(例如,仅关键服务器)
此致 Jony
答案 2 :(得分:0)
浏览您的高优先级查询,并确保它们写得很好并且具有/使用适当的索引。
使用与高优先级查询相同的表查找其他查询,并确保以相同的方式优化它们。
查询/索引更好时,将使用更少的CPU / RAM,并且行上发生的隐式锁更少,从而最大程度地提高了所有查询的速度。
在DBA站点上的查询和调优帮助,但是将需要更多信息。