mysql_stmt_prepare

为了做压测,将MYISAM引擎的表drop,建为innoDB的引擎。
再启动压测,插入的时候,mysql_stmt_prepare()全部报CR_OUT_OF_MEMORY错误。

奇怪,难道和引擎切换有关系。

执行
show variables;查看每个参数,
最终确定问题的所在:max_prepared_stmt_count=16382
于是将这个参数改大:
set global max_prepared_stmt_count=65536;
再启动压测程序,插入正常。

由此可见,myisam使用的statement池和innodb的池是不共享数据的。否则同样的语句不该出现空间满的问题。

========我是单纯的分割线,添加日期01202013=========

以上的方法是转载的,看到别人这么解决的,后来发现软件在客户那里还是频繁会出现该问题,后来经过查找,是有些地方忘了试用

mysql_stmt_close

可以说,使用了mysql_stmt_prepare,就一定要使用一个mysql_stmt_close。

mysql_stmt_close返回值为null则是成功执行,否则是执行出错了

if (mysql_stmt_close(stmt))

{

       fprintf(stderr, " %s\\n", mysql_stmt_error(stmt));

}

下面是官网代码 ,自己看用法,举一反三

 

#define STRING_SIZE 50
 
#define DROP_SAMPLE_TABLE "DROP TABLE IF EXISTS test_table"
#define CREATE_SAMPLE_TABLE "CREATE TABLE test_table(col1 INT,\
                                                 col2 VARCHAR(40),\
                                                 col3 SMALLINT,\
                                                 col4 TIMESTAMP)"
#define INSERT_SAMPLE "INSERT INTO test_table(col1,col2,col3) VALUES(?,?,?)"
 
MYSQL_STMT    *stmt;
MYSQL_BIND    bind[3];
my_ulonglong  affected_rows;
int           param_count;
short         small_data;
int           int_data;
char          str_data[STRING_SIZE];
unsigned long str_length;
my_bool       is_null;
 
if (mysql_query(mysql, DROP_SAMPLE_TABLE))
{
  
  fprintf(stderr, " DROP TABLE failed\n");
  fprintf(stderr, " %s\n", mysql_error(mysql));
  exit(0);
}
 
if (mysql_query(mysql, CREATE_SAMPLE_TABLE))

                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值