开发者社区> 重庆八怪> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Mysql Prepared statement needs to be re-prepared

简介:
+关注继续查看

这个是我自己的笔记没有阅读性。也没仔细看。但是记录下断点以后好研究。

朋友遇到这个错修改了参数
| table_definition_cache | 1400 |
| table_open_cache | 2000 |
均设置为16384就好了。

但是他搞不明白有什么关系。我就看了一下这个报错的错误码
{ "ER_NEED_REPREPARE", 1615, "Prepared statement needs to be re-prepared" },
分析后他应该是在函数check_and_update_table_version中抛出来的。
其注释有

  Compare metadata versions of an element obtained from the table
  definition cache and its corresponding node in the parse tree.

其逻辑有

static bool
check_and_update_table_version(THD *thd,
                               TABLE_LIST *tables, TABLE_SHARE *table_share)
{
  if (! tables->is_table_ref_id_equal(table_share))
  {
    Reprepare_observer *reprepare_observer= thd->get_reprepare_observer();

    if (reprepare_observer &&
        reprepare_observer->report_error(thd)) //这里如果前面的指针为NULL则触发这个报错逻辑
    {
      /*
        Version of the table share is different from the
        previous execution of the prepared statement, and it is
        unacceptable for this SQLCOM. Error has been reported.
      */
      DBUG_ASSERT(thd->is_error());
      return TRUE;
    }
    /* Always maintain the latest version and type */
    tables->set_table_ref_id(table_share);
  }

  DBUG_EXECUTE_IF("reprepare_each_statement", return inject_reprepare(thd););
  return FALSE;
}

看来他们确实有联系,但是怎么联系的说不上来,这个观察者搞毛线的我也不知道。以后再说。
断点设置

1       breakpoint     keep y   0x0000000000ebd5f3 in main(int, char**) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/main.cc:25
        breakpoint already hit 1 time
4       breakpoint     keep y   0x00000000016a04bd in open_table_from_share(THD*, TABLE_SHARE*, char const*, uint, uint, uint, TABLE*, bool)
                                               at /root/mysql5.7.14/percona-server-5.7.14-7/sql/table.cc:3038
        breakpoint already hit 4 times
5       breakpoint     keep y   0x0000000001519a10 in check_and_update_table_version(THD*, TABLE_LIST*, TABLE_SHARE*)
                                               at /root/mysql5.7.14/percona-server-5.7.14-7/sql/sql_base.cc:4219
        breakpoint already hit 4 times
6       breakpoint     keep y   0x00000000015285bb in Table_cache::add_used_table(THD*, TABLE*) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/table_cache.h:353
        breakpoint already hit 2 times
7       breakpoint     keep y   0x0000000001527427 in TABLE_LIST::set_table_ref_id(enum_table_ref_type, ulonglong)
                                               at /root/mysql5.7.14/percona-server-5.7.14-7/sql/table.h:2100
8       breakpoint     keep y   0x00000000015273e3 in TABLE_LIST::set_table_ref_id(TABLE_SHARE*) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/table.h:2095
        breakpoint already hit 1 time

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
RDS MySQL 8.0 Statement queue
【7】Statement Queue 背景 MySQL 的 server 层和引擎层在 statement 并发执行过程中,有很多串行化的点,在 DML 语句中,事务锁冲突比较常见,InnoDB 中事务锁的最细粒度是行级锁,如果语句针对相同行进行并发操作,会导致冲突比较严重,系统吞吐量会随着并发的增加而递减。
1587 0
PrepareStatement 如何打印真实 SQL
我们知道,JDBC 的 PrepareStatement 优点多多,通常都是推荐使用 PrepareStatement 而不是其基类 Statment。PrepareStatement 支持 ? 占位符,可以将参数按照类型转自动换为真实的值。
2012 0
【OH】Creating a Database with the CREATE DATABASE Statement
 来源于online help  http://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm Home / Database / Oracle Database Online Documentation 11g Release 2 (11.
931 0
VS2010 :找不到System.Web.Extensions.dll引用
今天在写通用序列化的时候发现JavaScriptSerializer找不到命名空间,那就去添加引用呗,找System.Web.Extensions.dll发现,找不到啊,于是,我就反反复复找了好几遍,还是木有找到,最后上网搜了一下,发现这个dll在: C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramewor
1114 0
VS2010 :找不到System.Web.Extensions.dll引用
今天在写通用序列化的时候发现JavaScriptSerializer找不到命名空间,那就去添加引用呗,找System.Web.Extensions.dll发现,找不到啊,于是,我就反反复复找了好几遍,还是木有找到,最后上网搜了一下,发现这个dll在: C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramewor
1277 0
+关注
重庆八怪
10年ORACLE/MYSQL DBA,有一定C/C++基础
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Scale out database without pain
立即下载
AntsDB:MySQL Compatibility for HBase
立即下载
低代码开发师(初级)实战教程
立即下载