一、Can't create more than max_prepared_stmt_count statements
问题原因:
mysql参数:
mysql>
show global status like 'com_stmt%';
查看以下参数:
Com_stmt_close prepare语句关闭的次数
Com_stmt_execute prepare语句执行的次数
Com_stmt_prepare prepare语句创建的次数
mysql的原因:
Com_stmt_prepare 减去 Com_stmt_close 大于 max_prepared_stmt_count 就会出现这种错误。而max_prepared_stmt_count的取值范围:0 - 1048576,默认为16382
sysbench的原因:
sysbench初始化线程时会预编译SQL语句,但是语句时处于准备状态(Com_stmt_prepare),而这些语句在sysbench初始化所有线程完成前不会执行,所以prepare语句关闭的次数为0(Com_stmt_close),所以会出现这个问题。
解决方法:
1. 使用sysbench参数 --db-ps-mode=disable
使用--db-ps-mode参数并指定为disable,禁用预处理语句的模式。
通过`sysbench --help`查看。
2. 手动调整max_prepared_stmt_count参数
max_prepared_stmt_count的取值范围:0 - 1048576
sysbench中oltp_read_write.lua的默认预处理语句个数:`threads × (2 + 9 × tables)`;
其中那9条语句分别是 point-select、4 × range _ select、2 × update、 delete 和 insert。最上面两条为begin与commit语句。
SET GLOBAL max_prepared_stmt_count=...
另外如果sysbench过程中产生的预处理语句个数超过了max_prepared_stmt_count参数的最大值,那么可以适当减少表个数,或者通过其最大值来预先计算一下最大表的数量,以规避这个错误。
但是此方法仅临时有用,因为`Com_stmt_prepare`生成后,若sysbench产生报错,其不会减少而是会积累,若其突破了max_prepared_stmt_count的限制,那么仍会出现问题。
二、sysbench FATAL: error 2004: Can't create TCP/IP socket (24) FATAL:
FATAL: error 2004: Can't create TCP/IP socket (24)
FATAL: `thread_init' function failed: /usr/local/share/sysbench/oltp_common.lua:356: connection creation failed
FATAL: /usr/local/share/sysbench/oltp_read_write.lua:22: module 'oltp_common' not found:
no field package.preload['oltp_common']
no file './oltp_common.lua'
no file './oltp_common/init.lua'
no file './src/lua/oltp_common.lua'
no file '/root/.luarocks/share/lua/5.1/oltp_common.lua'
no file '/root/.luarocks/share/lua/5.1/oltp_common/init.lua'
no file '/root/.luarocks/share/lua/oltp_common.lua'
no file '/root/.luarocks/share/lua/oltp_common/init.lua'
no file '/usr/local/share/lua/5.1/oltp_common.lua'
no file '/usr/share/lua/5.1/oltp_common.lua'
no file '/usr/local/share/sysbench/oltp_common.lua'
no file './oltp_common.so'
no file '/root/.luarocks/lib/lua/5.1/oltp_common.so'
no file '/root/.luarocks/lib/lua/oltp_common.so'
no file '/usr/local/lib/lua/5.1/oltp_common.so'
no file '/usr/lib/lua/5.1/oltp_common.so'
no file '/usr/local/lib/sysbench'
FATAL: unable to connect to MySQL server on host '172.16.0.177', port 13306, aborting...
FATAL: error 2004: Can't create TCP/IP socket (24)
FATAL: `thread_init' function failed: /usr/local/share/sysbench/oltp_common.lua:356: connection creation failed
FATAL: Threads initialization failed!
解决方法:
`ulimit -a`
调整openfile大小
`ulimit -n 65535`
三、PANIC: unprotected error in call to Lua API (not enough memory)
PANIC: unprotected error in call to Lua API (not enough memory)
FATAL: `thread_init' function failed: not enough memory
原因:sysbench的LuaJIT组件最多分配了2G内存
解决:
使用sysbench 1.1.0-df89d34
sysbench1.1编译安装:
参考:
> [sysbench1.1编译安装](https://github.com/akopytov/sysbench#build-and-install)
> 缺少依赖可以先用[centos安装sysbench](https://github.com/akopytov/sysbench#rhelcentos)安装一下依赖
编译sysbench1.1过程:
Github编译失败缺少mysqlclient
可以先从github用yum包装,或者下载mysqlclient库
在编译在sysbench/src/sysbench得到1.1
四、FATAL: Worker threads failed to initialize within 30 seconds!
sysbench线程初始化时间超过30s,sysbench默认最多初始化为30s
解决方法:
1. 使用sysbench1.1的`--thread-init-timeout=N`参数调整,安装sysbench1.1见上
2. 修改sysbench源码修改宏定义,并重新编译
五、sysbench过程中报错,原因mysql中打开的表太多了,具体报错忘了
问题原因:
mysql中有个参数table_open_cache用来限制mysql引擎能够打开的最大表数
解决方法:
调整mysql的参数table_open_cache
`set global table_open_cache=65535`
六、mysql error 110_ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x' (110)
主要就是连不上mysql数据库
可能原因:
1. 网络不通
* 可以尝试`ping ip`看server端网络情况
2. 端口不能访问
* 可以尝试`telnet ip port`,查看端口是否开放
3. mysql连接数到达最大值
* 尝试查看mysql错误日志
* 尝试调整mysql的`max_connections`参数
* vpc通道限制