表结构
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 和 查询缓存,目测有所改善。
SELECT ... FOR UPDATE
的WHERE中不带主键,就是锁全表了。不知道为啥你要FOR UPDATE
。