PolarDB MySQL 5.7/8.0中Statement Queue和Inventory Hint结合使用案例及注意事项
更新时间:
概述
对于PolarDB MySQL高并发热点优化,PolarDB MySQL提供了结合Statement Queue和Inventory Hint的使用方式,使用过程中需要注意将对应的Inventory Hint通过DBMS_OUTLN.add_optimizer_outline加入到SQL语句中。本文主要以PolarDB MySQL 5.7/8.0为例进行说明和介绍注意事项。
详细信息
- 当您需要并发更新某个商品库存表时,可以结合Statement Queue和Inventory Hint一起使用。示例表结构如下所示。
CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`kucun` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; - 您需要按照以下SQL通过add_optimizer_outline加入Optimizer Hint,COMMIT_ON_SUCCESS需要在ccl_queue_filed前面。
CALL DBMS_OUTLN.add_optimizer_outline ( 'jmdb07', '', 1, '/*+ COMMIT_ON_SUCCESS ccl_queue_filed("id") */', "UPDATE t2 SET kucun = kucun - 1 WHERE id = 100 AND kucun > 0" )
系统显示类似如下,说明创建成功。
若ccl_queue_filed在前面,COMMIT_ON_SUCCESS在后面,会出现以下报错。 - 当添加好Optimizer Hint后,可以通过以下步骤进行验证:
- 开启一个事务,变更数据。
begin;
UPDATE /*+ COMMIT_ON_SUCCESS ccl_queue_filed("id") */ t2 SET kucun = kucun - 1 WHERE id = 100 AND kucun > 0说明:执行SQL语句时,需要添加Inventory Hint,否则添加的配置不会生效。
系统显示类似如下。 - 此时事物未提交,新开一个会话,可以看到库存已经减1,说明COMMIT_ON_SUCCESS已经生效。
- 执行以下命令,查看是否命中添加的Statement Outline。
call dbms_outln.show_outline();
系统显示类似如下,说明已经命中。
- 开启一个事务,变更数据。
相关文档
适用于
- PolarDB MySQL云原生数据库
文档内容是否对您有帮助?