mysql 游戏框架_LollipopGo开源游戏服务器框架--数据库错误问题

游戏服务器运行了几天,报错:

can't create more than max_prepared_stmt_count statements (current value: 163

mysql_stmt_prepare failed! error(1461)Can't create more than max_prepared_stmt_count statements (current value: 16382)

给出的回复如下:

max_prepared_stmt_count参数限制了同一时间在mysqld上所有session中prepared 语句的上限。

它的取值范围为“0 - 1048576”,默认为16382。

mysql对于超出max_prepared_stmt_count的prepare语句就会报1461的错误。

对于现场而言,可以先将这个值调大。

一般而言,默认值应该是足够用的,因为现场的并发其实没有那么的大。

一个可能的原因是应用端那边没有关闭prepared的语句。

直连后端master执行如下命令

mysql> show global status like ‘com_stmt%’;

查看如下3个参数值:

Com_stmt_close prepare语句关闭的次数

Com_stmt_execute prepare语句执行的次数

Com_stmt_prepare prepare语句创建的次数

请确认Com_stmt_close的值是否接近于Com_stmt_prepare。

information_schema很有用,大家可以去这里面查看一些db的基础信息。

use information_schema; -- mysql的基础信息库

select * from ENGINES ; -- 后台存储引擎信息数据的表

show engines; -- mysql窗口界面的命令

select * from GLOBAL_STATUS ; -- 当前运行的全局的status参数信息数据

show status; -- 命令行查看

select * from GLOBAL_VARIABLES ; -- 当前的全局的参数存储的数据

show variables; -- 命令行查看

sysbench 2000并发读写 报错如下:

FATAL: mysql_stmt_prepare() failed

FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)"

FATAL: thread#1638: failed to prepare statements for test

查看值

mysql> show global status like 'com_stmt%';

+-------------------------+----------+

| Variable_name | Value |

+-------------------------+----------+

| Com_stmt_close | 15000 |

| Com_stmt_execute | 11024051 |

| Com_stmt_fetch | 0 |

| Com_stmt_prepare | 124200 |

| Com_stmt_reprepare | 0 |

| Com_stmt_reset | 0 |

| Com_stmt_send_long_data | 0 |

+-------------------------+----------+

mysql> set global Com_stmt_close=124000;

ERROR 1193 (HY000): Unknown system variable 'Com_stmt_close'

mysql> show global variables like 'com_stmt%';

Empty set (0.00 sec)

mysql> show global variables like '%stmt%';

+----------------------------+----------------------+

| Variable_name | Value |

+----------------------------+----------------------+

| binlog_stmt_cache_size | 32768 |

| max_binlog_stmt_cache_size | 18446744073709547520 |

| max_prepared_stmt_count | 16382 |

+----------------------------+----------------------+

3 rows in set (0.00 sec)

mysql> set global max_prepared_stmt_count=124000;

Query OK, 0 rows affected (0.00 sec)

LollipopGo 服务器重启流程解决以上问题

// 服务器重启流程

mysql -uroot -p

/etc/my.cnf

service mysqld start

service httpd start

redis-server 6379.conf

// 查看最大链接

show variables like "max_connections";

>mysql -uuser -ppassword(命令行登录MySQL)

mysql>show variables like 'max_connections';(查可以看当前的最大连接数)

msyql>set global max_connections=1000;(设置最大连接数为1000,可以再次查看是否设置成功)

mysql>exit(推出)

// 超时时间

查看mysql server超时时间:

msyql> show global variables like '%timeout%';

设置mysql server超时时间(以秒为单位):

msyql> set global wait_timeout=10;

msyql> set global interactive_timeout=10;

每天坚持学习1小时Go语言,大家加油,我是彬哥,下期见!如果文章中不同观点、意见请文章下留言或者关注下方订阅号反馈!

Golang语言社区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值