您可以调整RDS MySQL实例的max_prepared_stmt_count参数,以满足压测和业务需求。本文介绍Sysbench压测模型下max_prepared_stmt_count参数的设置方法。
背景信息
max_prepared_stmt_count参数限制了Server Prepare Statement的总数。用于可能存在拒绝服务攻击的环境,这种攻击会注入大量Prepare Statement语句来耗费MySQL实例的内存。详情请参见max_prepared_stmt_count。
RDS MySQL实例max_prepared_stmt_count参数默认值为16382,在某些场景下,该默认值过小,无法满足需求,需要将参数值调大。例如,在Sysbench压测场景下,可能会出现报错,提示max_prepared_stmt_count参数值过小:
FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)"
应用场景
在以下场景下,您需要修改RDS MySQL实例的max_prepared_stmt_count参数值:
-
Sysbench压测场景。
-
业务对max_prepared_stmt_count参数有特殊需求的场景 。
注意事项
-
在Sysbench压测场景下,需临时调大max_prepared_stmt_count参数值以满足测试需求,测试完成后建议调小该参数值,避免内存和安全风险。
-
调大和调小max_prepared_stmt_count参数值的风险如下:
-
调大的风险:一条Prepare Statement语句最少需要占用8 KB的内存,调大会占用过多的实例内存资源,增加MySQL被攻击的风险。
-
调小的风险:风险较小,现有Prepare Statement语句不受影响,超过max_prepared_stmt_count数量后不能准备新的Prepare Statement语句,需要等之前的Prepare Statement语句被释放。
-
Sysbench压测下的参数设置依据
本文以Sysbench 1.0.20为例,通过分析Sysbench源码,总结了常见压测模型下Prepare Statement语句数量的计算公式。对于某个测试模型,只要max_prepared_stmt_count参数值大于或等于下表中的Prepare Statement语句数,即可满足Sysbench测试要求。
测试模型 |
Prepare Statement语句数 |
oltp_read_only |
大于或等于线程数x表数量x5+线程数 |
oltp_write_only |
大于或等于线程数x表数量x4+线程数 |
oltp_read_write |
大于或等于线程数x表数量x9+线程数 |
oltp_insert |
0(该场景没有Prepare Statement语句) |
例如,在oltp_read_only模型下,线程数为256,表数量为100时,根据公式计算得到Prepare Statement语句数为128256。那么在Sysbench测试过程中,只需将max_prepared_stmt_count参数设置为比128256大的值,即可满足Sysbench测试需求。
参数设置步骤
请参见设置实例参数。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/156147.html