MySql优化经验分享

一条sql的具体执行过程

连接

我们怎么查看MySQL当前有多少个连接?

可以用show status命令,模糊匹配Thread,

Show global status like "Thread%"

show global variables like 'wait timeout';—非交互式超时时间,如JDBC程序

show global variables like 'interactive timeout';"交互式超时时间,如数据库工具默认都是28800秒,8小时。

既然连接消耗资源,MySQL服务允许的最大连接数(也就是并发数)默认是多少呢?在5.7版本中默认是151个,最大可以设置成100000

MySQL中的参数(变量)分为session和global级别,分别是在当前会话中生效和 全局生效,但是并不是每个参数都有两个级别,比如max_connections就只有全局级别。当没有带参数的时候,默认是session级别,包括查询和修改。比如修改了一个参数以后,在本窗口査询已经生效,但是其他窗口不生效:所以,如果只是临时修改,建议修改session级别。如果需要在其他会话中生效,必须显式地加上global参数。

缓存

缓存没有生效,为什么?MySQL的缓存默认是关闭的。show variables like  “query_cache%”!;

主要是因为MySQL自带的缓存的应用场景有限,第一个是它要求SQL语句必须一 模一样,中间多一个空格,字母大小写不同都被认为是不同的的SQL。第二个是表里面任何一条数据发生变化的时候,这张表所有缓存都会失效,所以对 于有大量数据更新的应用,也不适合。

词法解析与语法解析

词法分析

就是把一个完整的SQL语句打碎成一个个的单词。

select name from user where id = 1;

它会打碎成8个符号,每个符号是什么类型,从哪里开始到哪里结束。

语法分析  

语法分析会对SQL做一些语法检查,比如单引号有没有闭合,然后根据MySQL定义的语法规则,根据SQL语句生成一个数据结构。这个数据结构我 们把它叫做解析树

预处理器

实际上还是在解析的时候报错,解析SQL的环节里面有个预处理器。它会检査生成的解析树,解决解析器无法解析的语义。

它会检査表和列名是否存在,检査名字和别名,保证没有歧义。预处理之后得到一个新的解析树。

査询优化器


査询优化器的模块(Optimizer)。

査询优化器的目的就是根据解析树生成不同的执行计划(Execution Plan),然后选择一种最优的执行计划,MySQL里面使用的是基于开销(cost)的优化器,那种执行计划开销最小,就用哪种。可以使用这个命令査看査询的开销:

show status like 'Last_query_cost';

error 1040: Too many connections的错误。这个是超

过了服务端设置的最大并发连接数。

优化的思路

1、从服务端来说,我们可以增加服务端的可用连接数。

如果有多个应用或者很多请求同时访问数据库,连接数不够的时候,我们可以:

(1)增加可用连接数,修改max connections的大小:

show variables like max_connections;   ・・修改最大连接数,当有多个应用连接的时候

(2)或者,或者及时释放不活动的连接。交互式和非交互式的客户端的默认超时时

间都是28800秒,8小时,我们可以把这个值调小。

show global variables like ‘wait_timeout’

引入连接池,实现对连接重用

2   缓存层面

使用缓存 redis 

集群

主从复制

(1)master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;            

​              (2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件

​              (3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。

也就是说:

- 从库会生成两个线程,一个I/O线程,一个SQL线程;

- I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;

- 主库会生成一个log dump线程,用来给从库I/O线程传binlog;

- SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;

修改配置

修改配置的工作一般由专业的DBA完成。也有一些工具可以给出

推荐值。

慢日志查询

1 打开慢日志开关

因为开启慢查询日志是有代价的(跟binlog—样),所以它默认

是关闭的:

show variables like ‘slow_query’

除了这个开关,还有一个参数,控制执行超过多长时间的SQL才记录到慢日志,默

认是10秒。如果改成0秒的话就是记录所有的SQL。

show variables like ‘%long_query%’;

set @@global.slow_query_log=l;・.1开启,0关闭,重启后失效

set @@global.long_query_time=3;-默认10秒,另开一个窗口后才会查到最新值 show variables like ,%long_queiy%1; show variables like '%slow_query%‘;

修改配置文件my.cnfo

以下配置定义了慢査询日志的开关、慢査询的时间、日志文件的存放路径。

slowquerylog = ON long_qu eiy_time=2 slowqueiylogfile =/var/lib/mysql/localhost-slow.log

模拟慢査询:

慢日志分析 1、日志内容

less /var/lib/mysql/localhost-slow.log

MySQL提供了 mysqldumpslow的工具,在MySQL的bin目录下。

Mysqldumpslow – help

show engine存储引擎运行信息

show engine用来显示存储引擎的当前运行信息,包括事务持有的表锁、行锁信息;

事务的锁等待情况;线程信号量等待;文件IO请求;buffer pool统计信息。

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

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

相关文章

c++ | 字符串与指针的恩断情仇

我想&#xff0c;c/c中难的不是指针&#xff0c;而是其中的变化&#xff0c;尤其是思维的转变。很多东西 就是容易掉进陷阱。好在&#xff0c;你我都是善于思考的码农&#xff01; 大致情况是这样的&#xff0c;底层<–>c语言<–>c<–>应用 而数据的传输的最…

【MongoDB】Windows 安装MongoDB 6.0

一、下载安装包 安装包下载地址https://www.mongodb.com/try/download/community这里我选择的是 二、解压并安装 1、解压 这里我将压缩包解压到了D盘&#xff0c;并重命名成了mongodb&#xff0c;解压后的目录如下&#xff1a; 2、创建配置文件 在D:\mongodb下新建conf目录…

【触想智能】4U触摸工控机具有哪些优势?

工控机也叫工控主机&#xff0c;和我们常见的普通电脑主机是一样的&#xff0c;都是由CPU、主板、内存、硬盘、电源以及机箱组成的。 工控机有很多分类&#xff0c;有无风扇工控机、嵌入式工控机、上架式工控机、4U触摸工控机等。上架式工控机在市场上是比较受欢迎的&#xff0…

Django实战项目-学习任务系统-发送邮件通知

接着上期代码内容&#xff0c;继续完善优化系统功能。 本次增加发送邮件通知功能&#xff0c;学习任务系统发布的任务&#xff0c;需要及时通知到学生用户知晓。 由于目前智能手机普及&#xff0c;人人都离不开手机&#xff0c;所以手机端接收通知信息更加及时有效。 其中微信…

superagent 库

superagent 是一个流行的 JavaScript 库&#xff0c;用于在浏览器和 Node.js 环境中进行 HTTP 请求。它提供了简洁的 API&#xff0c;使得发送异步请求变得非常容易。 以下是一个使用 superagent 的简单示例&#xff1a; 在浏览器环境中&#xff1a; // 发送 GET 请求 supe…

自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目

自定义的卷积神经网络模型CNN&#xff0c;对图片进行分类并使用图片进行测试模型-适合入门&#xff0c;从模型到训练再到测试&#xff1a;开源项目 开源项目完整代码及基础教程&#xff1a; https://mbd.pub/o/bread/ZZWclp5x CNN模型&#xff1a; 1.导入必要的库和模块&…

PP-Matting:trimap free的高精度自然图像抠图

论文&#xff1a;https://arxiv.org/abs/2204.09433 代码&#xff1a;https://github.com/PaddlePaddle/PaddleSeg 1、动机 在自然图像抠图领域&#xff0c;大多数方法都是基于Trimap来做抠图&#xff0c;这种trimap-based的方式在抠图时还需要用户绘制一个trimap作为模型输入&…

SpringBoot--Web开发篇:含enjoy模板引擎整合,SpringBoot整合springMVC;及上传文件至七牛云;restFul

SpringBoot的Web开发 官网学习&#xff1a; 进入spring官网 --> projects --> SpringBoot --> LEARN --> Reference Doc. --> Web --> 就能看到上述页面 静态资源映射规则 官方文档 总结&#xff1a; 只要是静态资源&#xff0c;放在类路径下&#xff1…

整理笔记——0欧电阻、电感、磁珠

设计电路时&#xff0c;经常用到0欧电阻、电感、磁珠&#xff0c;这三个基础电子原件万用表量都是“短路”&#xff0c;这三者之间有什么区别&#xff1f;什么情况下用什么原件&#xff1f; 一、0欧电阻 0欧电阻&#xff0c;并不是指元件的电阻值为0&#xff0c;而是电阻值很小…

使用免费 FlaskAPI 部署 YOLOv8

目标检测和实例分割是计算机视觉中关键的任务&#xff0c;使计算机能够在图像和视频中识别和定位物体。YOLOv8是一种先进的、实时的目标检测系统&#xff0c;因其速度和准确性而备受欢迎。 Flask是一个轻量级的Python Web框架&#xff0c;简化了Web应用程序的开发。通过结合Fla…

SpringBoot 日志

一、概述 日志是程序的重要组成部分&#xff0c;程序报错了&#xff0c;我们可以通过查看日志信息排除和定位问题。 二、日志格式 在启动 SpringBoot 项目时&#xff0c;控制台中默认会打印一些日志&#xff0c;下面我们截取一段日志信息&#xff0c;分析一下日志的格式&…

【蓝桥每日一题]-二分类型(保姆级教程 篇3) #路标设置 #跳石头

今天接着讲二分题型 目录 题目&#xff1a;路标设置 思路&#xff1a; 题目&#xff1a;跳石头 思路&#xff1a; 题目&#xff1a;路标设置 思路&#xff1a; 求&#xff1a;放n个路标后的最小空旷指数 二分查找&#xff1a;对空旷指数进行二分 二分依据: 该空旷指数下放…

支付宝本地生活团购服务商如何申请?两个方法教给你

支付开宝的本地生活来了&#xff01;按支付宝财大气粗的做法&#xff0c;它一旦要推什么项目&#xff0c;那自然会在前期疯狂洒钱&#xff0c;以求通过这种模式快速占领市场。 所以&#xff0c;这次支付宝要推本地生活项目&#xff0c;这一贯做法自然得跟上&#xff0c;只是这…

飞致云及其旗下1Panel项目进入2023年第三季度最具成长性开源初创榜单

2023年10月26日&#xff0c;知名风险投资机构Runa Capital发布2023年第三季度ROSS指数&#xff08;Runa Open Source Startup Index&#xff09;。ROSS指数按季度汇总并公布在代码托管平台GitHub上年化增长率&#xff08;AGR&#xff09;排名前二十位的开源初创公司和开源项目。…

win10pycharm和anaconda安装和环境配置教程

windows10 64位操作系统下系统运行环境安装配置说明 下载和安装Anaconda&#xff0c;链接https://www.anaconda.com/download 下载完后&#xff0c;双击exe文件 将anaconda自动弹出的窗口全部关掉即可&#xff0c;然后配置高级系统变量 根据自己的路径&#xff0c;配置…

基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP

最近我在 International Journal of Digital Earth &#xff08;《国际数字地球学报》&#xff09;发表了一篇森林生物量模型构建的文章&#xff1a;Evaluation of machine learning methods and multi-source remote sensing data combinations to construct forest above-gro…

欧科云链研究院:如何降低Web3风险,提升虚拟资产创新的安全合规

在香港Web3.0行业&#xff0c;技术推动了虚拟资产投资市场的快速增长&#xff0c;但另一方面&#xff0c;JPEX诈骗案等行业风险事件也接连发生&#xff0c;为Web3行业发展提供了重要警示。在近期的香港立法会施政报告答问会上&#xff0c;行政长官李家超表示&#xff0c;与诈骗…

图像特征Vol.1:计算机视觉特征度量|第二弹:【统计区域度量】

目录 一、前言二、统计区域度量2.1&#xff1a;图像矩特征2.1.1&#xff1a;原始矩/几何矩2.1.2&#xff1a;中心距2.1.3&#xff1a;归一化的中心矩2.1.4&#xff1a;不变矩——Hu矩2.1.5&#xff1a;OpenCv实现矩特征及其应用 2.2&#xff1a;点度量特征2.3&#xff1a;全局直…

在 GORM 中定义模型

为实现与数据库的无缝交互而打造有效模型的全面指南 在使用 GORM 进行数据库管理时&#xff0c;定义模型是基础。模型是您的应用程序的面向对象结构与数据库的关系世界之间的桥梁。本文深入探讨了在 GORM 中打造有效模型的艺术&#xff0c;探讨如何创建结构化的 Go 结构体&…

从零开始的目标检测和关键点检测(三):训练一个Glue的RTMPose模型

从零开始的目标检测和关键点检测&#xff08;三&#xff09;&#xff1a;训练一个Glue的RTMPose模型 一、重写config文件二、开始训练三、ncnn部署 从零开始的目标检测和关键点检测&#xff08;一&#xff09;&#xff1a;用labelme标注数据集 从零开始的目标检测和关键点检测…