MySQL视图查询报错:Prepared statement needs to be re-prepared

From: https://www.ywnds.com/?p=12609

今天公司的项目视图查询报错,报错如:ERROR 1615 (HY000): Prepared statement needs to be re-prepared

网上找了一圈,都说调整以下值就好了:

mysql> set global table_open_cache=16384;
mysql> set global table_definition_cache=16384;

其实真正只调整table_definition_cache问题就解决了。这两个参数是MySQL中与表对象缓存相关的参数。

table_open_cache

System VariableNametable_open_cache
ScopeGlobal
DynamicYes
Permitted ValuesTypeinteger
Default2000
Minimum1
Maximum524288

打开表的缓存数量。也不是定义内存大小的,而是定义可以缓存多少打开的表的文件句柄信息。如果定义的太小,那么MySQL在需要打开新表的时候就要不断的关闭已经打开的表和打开此次需要打开的表。性能会受到影响。

table_definition_cache

System VariableNametable_definition_cache
ScopeGlobal
DynamicYes
Permitted ValuesTypeinteger
Default-1 (autosized)
Minimum400
Maximum524288

表定义信息缓存是从MySQL 5.1.3版本才开始引入的一个新的缓存区,用来存放表定义信息。当我们的MySQL中使用了较多的表的时候,此缓存无疑会提高对表定义信息的访问效率。MySQL提供了table_definition_cache参数给我们设置可以缓存的表的数量。在MySQL 5.1.25之前的版本中,默认值为128,从MySQL 5.1.25版本开始,则将默认值调整为256了,最大设置值为524288。注意,这里设置的是可以缓存的表定义信息的数目,而不是内存空间的大小。

然后就是这个两个参数跟视图访问报错有什么关系呢?有点懵逼了,就问了一个朋友@八怪,看了一下这个报错的错误码。

{ “ER_NEED_REPREPARE”, 1615, “Prepared statement needs to be re-prepared” }

分析后他应该是在函数check_and_update_table_version中抛出来的。

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 theprevious execution of the prepared statement, and it isunacceptable 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;
}

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

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

table_open_cache与table_definition_cache对MySQL(内存)的影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用FF的Firebug组件中的net工具查看页面元素加载消耗时间

1.安装FF的Firebug组件:点击FF的Tools的Add-ons菜单,输入Firebug关键字,并选择合适的版本Install。 2.安装完毕后地址栏右边会出现一个小虫图标,右边还有一个下拉箭头。如下图: 3.点击下拉箭头,选择“on fo…

Linux C 数据结构——二叉树

先放这张图: 可以看出,树是非线性结构; 一、树的概念 树(tree)是n(n>0)个节点的有限集合T,它满足两个条件: 1)有且仅有一个特定的称为根(root)的节点&…

antd 表单域验证规则 - 只能输入数字字符,去除前导0

<Form {...formItemLayout}><Form.Item label用户Id>{getFieldDecorator(uid, {initialValue: undefined,rules: [{ required: true, message: 请输入用户id, pattern: new RegExp(/^[1-9]\d*$/, g) }],getValueFromEvent: e > e.target.value.replace(/\D/g, )…

2013 822 划分子网

子网的划分是为了节省我们的网络的ip地址的分配,如我们有200台电脑需要一个子网段,我在这个192.168.0.1网段我们有254个地址,我们可以将我们的计算机划分成不同的子网,来进行使用,这样的话就是节省了大量的IP地址.补充下上次忘记总结的东西,就是如192.168.10.101/24 24表示我们…

BZOJ 3224: Tyvj 1728 普通平衡树

3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9629 Solved: 4091[Submit][Status][Discuss]Description 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一些数&#xff0c;其中需要提供以下操作&#xff1a;…

springboot中配置mybatis数据源,使用阿里的 Druid 数据库连接池

参考了很多文章&#xff0c;记录下自己的学习过程&#xff01; 参考&#xff1a;https://blog.csdn.net/weixin_40776321/article/details/99633110 1. 在pom.xml中添加依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>dr…

Linux C 算法——查找

所谓“查找”记为在一个含有众多的数据元素&#xff08;或记录&#xff09;的查找表中找出某个“特定的”数据&#xff0c;即在给定信息集上寻找特定信息元素的过程。 为了便于讨论&#xff0c;必须给出这个“特定的”词的确切含义。首先&#xff0c;引入一个“关键字”的概念&…

SharePoint项目中新建类库的错误处理及项目建设中遇到的问题总结

第一次SP项目总监遇到各种问题&#xff0c;以下是总结&#xff1a;问题1.创建SP项目的时候“场解决方案”跟“沙盒解决方案”是有区别的&#xff0c;具体可以看MSDN官方文档&#xff0c;这里简单摘抄如下&#xff1a;1&#xff09;场解决方案&#xff1a;承载与W3WP.exe中&…

ECharts学习(1)--简单图表的绘制

1.获取ECharts 官网 下载&#xff1a;http://echarts.baidu.com/download.html 2.在html页面中引入ECharts文件 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>ECharts练习</title><script type"text/javas…

php配置xdebug断点调试

环境&#xff1a;mac 10.15.4 zcmzcmdeMacBook-Pro 20190902 % php -v PHP 7.4.9 (cli) (built: Aug 7 2020 19:23:06) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologieswith Xdebug v2.9.6, Copyright (c) 2002-2020, by Derick R…

Linux C 算法——排序

排序(Sort)是将无序的记录序列&#xff08;或称文件&#xff09;调整成有序的序列。 为了方便讨论&#xff0c;在此首先要对排序下一个确切的定义&#xff1a; 假设含有n个记录的序列为 { R1、R2、&#xff0c;。。。Rn } 其相应的关键字序列为 {K1、K2&#xff0c;。。。。Kn}…

HTTP错误代码

服务器错误代码大全 400 - 错误的请求。 401 - 访问被拒绝。IIS 定义了许多不同的 401 错误&#xff0c;它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示&#xff0c;但不在 IIS 日志中显示&#xff1a; 401.1 - 登录失败。 401.2 - 服务器配置导致登录失败。 4…

UIKit封装的系统动画

简介 在UIKit中&#xff0c;对UIView封装了很多类方法来进行简单的动画实现&#xff0c;在动画过程中&#xff0c;通过对属性值的修改来完成一系列的效果。 在IOS4以前&#xff0c;主要通过 beginAnimation setAnimationDuration:设置动画时长 setAnimationDelay:设置延迟时…

MS SQL Server2008大数、小数转varchar

HTJE在表中的字段类型为float(53) 试了下str, cast和convert&#xff0c;发现对于小数或大数&#xff0c;多少都存在一些问题&#xff0c;最后经过尝试终于找到一种满意的答案&#xff1a; select cast(HTJE as decimal(20,2)) from T_HTGL where ID 1002993 对于金额部分&…

oracle那些基本知识

Oracle创建表空间、创建用户以及授权 、查看权限 rownum 分页查询 它是oracle系统顺序分配为从查询返回的行的编号&#xff0c;返回的第一行分配的是1&#xff0c;第二行是2&#xff0c;依此类推&#xff0c;这个伪字段可以用于限制查询返回的总行数&#xff0c;而且rownum不能…

JSON.parse 解析json字符串时,遇换行符报错

Json字符串转换成Json对象时候&#xff0c;有两种方式&#xff1a; 假设d是json字符串&#xff1a; 1&#xff0c;eval(( d ))。 2&#xff0c;JSON.parse(d)&#xff1b; 但是以上方式有隐患&#xff0c;如果Json字符串有换行的话&#xff0c;这样转换就会报错。 假如有…

jqueryui dialog asp.net服务端控件失效问题解决

最近使用jQuery Dialog做添加功能&#xff0c;发现服务端控件全部失效。 查资料是因为Dialog层被appendto 到了 body里&#xff0c;不在form里。 但网上给的解决方案我都不满意&#xff0c;觉得jQueryUI不会忽略这个问题&#xff0c;就查了API。 发现这个属性appendTo $( "…

用ASP生成RSS

<% Response.Clear Response.CharSet"gb2312" 数据集 Response.ContentType"text/xml" 数据流格式定义 Response.Write "<?xml version""1.0"" encoding""gb2312""?>"&vbNewLinesRssHea…

PHP中全局变量的使用global和$GLOBALS[]

From: http://blog.csdn.net/happyqyt/article/details/7219889 用PHP开发项目&#xff0c;不可避免的会使用到全局变量&#xff0c;比如一些网站的配置信息&#xff0c;全站通用&#xff0c;那就可以在一个地方设置&#xff0c;然后多个地方调用。 把变量定义为全局变量可以有…