Mysql--由prepared sql statement引发的问题
问题回顾
最近生产环境数据库查询接口异常,抛出异常信息表明预处理sql语句声明已经超过mysql系统设置限制max_prepared_stmt_count;
通过网上一些资料,分析大概是程序中数据库查询代码prepared sql statement没有关闭或者释放导致。
Can't create more than max_prepared_stmt_count statements (current value: 2000)
问题解决步骤:
1.先规避现网问题,可以把数据库系统变量max_prepared_stmt_count设置大一些;
2.通过数据库performance_schema.prepared_statements_instances表中的记录
分析当前系统有哪些prepared sql statement,根据sql语句排查代码是否没有关闭或者释放的prepared sql statement。
3.修改之后,测试代码,对比测试前后数据库状态参数Prepared_stmt_count是否有增长。
如果有增长,说明代码中修改还有遗漏。
查看命令:show global status like '%stmt%';
分析总结
prepared sql statement这个概念的含义、作用
形式如:select user_id, user_name from tb_uhome_admin_user where user_id = ?;
这种带有占位符(?)的SQL语句,通过客户端调用接口或者shell,在服务端生成预处理SQL语句声明。这样一看有点像查询模板;
使用预处理SQL语句声明的作用:
1.1.提高查询效率
sql语句执行过程的,先解析sql语句生成执行计划。预处理SQL语句声明,就把sql语句和执行计划存储在内存中,下次相同
sql语句就不需要再进行解析,直接映射到执行计划,参数替换占位符,从而提高效率;
1.2防止SQL注入攻击
prepared sql statement的使用场景和注意点
对于批量、并且固定查询条件参数的SQL,可以使用提高效率。
对于查询条件不固定的SQL和单个SQL查询,使用prepared sql statement对性能也没有太大的提升,
反而占用Mysql服务端资源,不建议使用
Mysql--由prepared sql statement引发的问题的更多相关文章
- 发现美的眼睛 Prepared SQL Statement
DROP PROCEDURE IF EXISTS truncate_insert_sales_rank_toparow_month; DELIMITER /w/ CREATE PROCEDURE tr ...
- Mysql数据库防SQL注入原理
每个语言都有自己的数据库框架或库,无论是哪种语言,哪种库,它们在数据库防注入方面使用的技术原理无外乎下面介绍的几种方法. 一.特殊字符转义处理 Mysql特殊字符指在mysql中具有特殊含义的字符,除 ...
- 直接放个DB2 SQL STATEMENT大全好了!
SQL statements This topic contains tables that list the SQL statements classified by type. SQL sch ...
- java.sql.preparedstatement和java.sql.statement的区别
本文转自CSDN,然后整理了一遍.原文出处:CSDN JDBC(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.stateme ...
- iReport 5.6.0 Error: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : data 最优解决方案
问题描述 近期学习iReport(个人使用的是最新版本的 iReport-5.6.0,MySQL是 5.5.56版本),遇到一些问题,在安装完成后,创建了数据库,配置了MySQL数据库连接信息,新建报 ...
- atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js
atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js 1. 两个方法:: bat vs mysqldump(推荐) vs lang ...
- 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...
- Drop all the tables, stored procedures, triggers, constraints and all the dependencies in one SQL statement
Is there any way in which I can clean a database in SQl Server 2005 by dropping all the tables and d ...
- MySQL 常用的sql语句小结(待续)
mysql 常用的sql语句 1.查看数据库各个表中的记录数 USE information_schema; SELECT table_name,table_rows FROM tables WHER ...
随机推荐
- 推荐系统实践 0x11 NeuralCF
前言 这一篇文章我们来谈一下2017年新加坡国立大学提出的基于深度学习的系统过滤模型NeuralCF.我们在之前讲过矩阵分解技术,将协同过滤中的共现矩阵分解成用户向量矩阵以及物品向量矩阵.那么Embe ...
- matplotlib的学习8-scatter散点图
import matplotlib.pyplot as plt import numpy as np n = 1024 # data size #生成1024个呈标准正太分布的二维数组(平均数为0,方 ...
- XML外部实体注入
文章参考链接: 参考视频: https://www.bilibili.com/video/BV1tW411o7Fd?from=search&seid=13868972487110648015 ...
- Docker Networks 笔记
Docker Networks Bridge NetworksThe Docker bridge driver automatically installs rules in the host mac ...
- SpringBoot从入门到精通教程(二)
SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...
- C# Wpf Shape类继承关系
Path派生于Shape namespace System.Windows.Shapes { public sealed class Path : Shape { // Path 派生于Shape } ...
- 5分钟教你在Linux下安装VMware
如果我们只有一台笔记本,又想要搭建一个小集群,怎么办?虚拟机帮你实现梦想,市面上较为常用的虚拟机软件有VMware.VirtualBox.Xen.KVM.hyper-v等,本文主要介绍如何在Linux ...
- Js 添加cookie,写入cookie到主域
if (getCookie("content") != null && getCookie("content") != "" ...
- IDEA和eclips工具对比
描述 eclipse idea 在当前类查找方法 ctrl+o ctrl+F12 查找文件 ctrl+shift+N 大小写转换 ctrl+shift+X ctrl+shift+Y ctrl ...
- request.getContextPath()返回值问题
转自:http://blog.sina.com.cn/s/blog_6cbe0cff0101j6jl.html request.getContextPath()是在开发Web项目时,经常用到的方法,其 ...