mysql行锁性能问题以及如何解决请求超时

表结构

CREATE TABLE s_asset` (
rid int(11) NOT NULL AUTO_INCREMENT,
mtl_id int(11) NOT NULL COMMENT '材料id',
company_id int(11) NOT NULL COMMENT '分组Id',
amount int(11) NOT NULL DEFAULT '1' COMMENT '数量',
PRIMARY KEY (rid),
KEY uq_material_company (mtl_id,company_id) USING BTREE
)`

当一个200多人的系统同时使用时候, 系统数据库连接池使用50个连接,当执行,通过分析每秒查询请求在300多个,当执行以下sql时,会花费较长时间, 直到50s超时,show processlist 查看请求,只有这条sql使用了锁,且不存在当前表的更新与删除请求,排除死锁可能。
select count(0) as count from s_asset where mtl_id = '94' and company_id = 1 for update;

备注:开始mysql未做任何配置优化,后面增加了pool size 和 查询缓存,目测有所改善。

疑问:mysql 应付如此数量的请求性能为何表现不佳,

阅读 2.8k
1 个回答

SELECT ... FOR UPDATE的WHERE中不带主键,就是锁全表了。不知道为啥你要FOR UPDATE

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题