pgbench 测试 postgresql 存储过程高并发锁表情况
一个常见的存储过程或者事务处理场景。
先进行 select 查询,然后进行 update。这个时候涉及到 select 行锁。否则,可能会 select 都能过,然后一起进行 update 了。为了避免这种情况,需要在 select 的时候,增加行锁(悲观锁)。具体到业务场景,可能存在查询多个行,只要锁定某个表的某一行数据的情况。所以有了下面的测试示例:
1. 创建表结构
假设你已经有如下的两个表 test_table1
和 test_table2
,其中 test_table2
的 test_table1_id
字段与 test_table1
表的 id
字段对应:
复制代码
2. 存储过程
将存储过程更新为使用 test_table1
和 test_table2
:
复制代码
3. 使用 pgbench
进行并发测试
创建一个 SQL 脚本文件(例如 test_script.sql
)来执行存储过程:
复制代码
然后使用 pgbench
命令进行并发测试:
复制代码
-c 5
: 5 个并发客户端。-j 2
: 2 个线程。-t 10
: 每个客户端执行 10 次。-f test_script.sql
: 使用你创建的 SQL 脚本文件。
4. 检查结果
测试完成后,查看 test_table1
的状态,验证并发更新操作是否如预期:
复制代码
在 pgbench
环境中测试并发操作对 test_table1
和 test_table2
的影响。
版权声明: 本文为 InfoQ 作者【俞立夫】的原创文章。
原文链接:【http://xie.infoq.cn/article/39403406b24ebeab81db5e6e1】。文章转载请联系作者。
评论