mysql性能问题定位_MySQL
bitsCN.com
mysql性能问题定位
使用mysql作为基础数据库的应用,可能会遇到一些数据库方面的性能问题,我们可以通过一些方法进行问题定位。以下介绍可以定位性能问题的四种方法,欢迎拍砖。
一、开启慢查询日志:
记录执行查询时间大于long_query_time的sql,long_query_time默认为2s;
show variables like ‘%slow%’
得到图中所示信息,这里可以查看到慢查询日志是否开启,慢查询日志文件的存放目录。
开启慢查询日志的方法:
1、vi /etc/my.cnf(这个是mysql的默认读取配置文件目录,一般会将my.cnf文件放在这下面)
[mysqld]下添加
slow_query_log=ON
long_query_time=1(sql语句执行时间超过该参数值,则会打印在慢查询日志中),默认执行时间超过2s的sql会打印在慢查询日志中。
修改了my.cnf中的配置项,需要重启数据库。
2、不重启数据库的情况下,执行 set global slow_query_log=ON,可以开启慢查询日志。
开启慢查询日志后,跟踪慢查询日志文件中的慢查询sql,再具体分析,通过调整sql写法,或者添加正确的索引,可以看到意想不到的性能效果。
二、分析慢查询sql:
1、Explain 打印执行计划
执行的selcet语句前面加上explain,可以告诉你mysql如何执行该条语句。
这里需要额外注意type、key、rows 、extra列展示的内容。
其中,
Type=all,表示使用的是全表扫描,在数据量大的情况下,全表扫描是非常耗性能的,这个需要特别注意;
Type=index,表示使用索引扫描,只会遍历索引树;
Type=range,表示使用索引范围扫描,常见于between 、>、
Type=ref,非唯一性索引扫,返回匹配某个单独值得所有行
Type=eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配
Type=const/system 读常量,最多只会有一条记录匹配,由于是常量,实际上只须要读一次
Type=null 不需要扫描表
访问类型从上到下由差变为最好。
key表示select中使用到的索引,如果为null,表示没有使用索引,从查询效率上讲,使用索引比不使用索引快。但并不是所有的都要加索引,索引也存在不足,这里就不详解。
rows表示执行该条sql所需要扫描的行数,这个没有绝对值可参考,一般来说越小越好,如果100万数据量的数据库,rows是70万,通过这个可以判断sql的查询性能很差,如果100万条数据量的数据库,rows是1万,从我个人的角度,还是能接受的。
extra
一些十分重要的额外信息,重点关注出现关键字:
Using filesort:当Query 中包含order by 操作,而且无法利用索引完成排序操作的时候,MySQL Query Optimizer 不得不选择相应的排序算法来实现。
Using temporary:在某些操作中必须使用临时表时,在 Extra 信息中就会出现Using temporary ,主要常见于 GROUP BY 和 ORDER BY 等操作中
当执行计划Extra 出现Using filesort 、Using temporary 时,可以考虑是否需要进行sql优化和调整索引,最后再调整my.cnf 中与排序或者临时表相关的参数,如sort_buffer_size或者tmp_table_size.
2、show full processlist 查看哪条sql一直占用进程
Time表示执行当前操作所耗费的时间,单位为秒(s);
State表面当前线程的状态,Info表示正在执行的操作;
这里如果发现time值比较大,state一直处于一个状态,那么从Info中我们可以获得耗时长的操作,再具体分析;
注意观察State中出现关于lock关键字的状态。
这个命令可以很直观地看到正在执行的sql,及其当前状态,操作比较方便。
3、show profile 定位sql在数据库中资源占用情况(注意,一个是show profiles,一个是show profile)
Show profiles主要展示在当前会话中,profiling_history_size条sql执行的时间、query_id,默认为15条,最大为100条,不能设为0。
SHOW VARIABLES LIKE ‘%profiling_history_size%’
SHOW VARIABLES LIKE ‘%profiling’或者select @@profiling 查看profiling是否开启
set profiling=1 开启profiling
执行一条sql
再执行show profiles,会把最近执行的sql给展示出来,
从图中找到刚刚执行的sql,query_id是120,执行时间是0.00079725s
如果我们想看sql在各个阶段所消耗时间,则使用如下
SHOW PROFILE FOR QUERY 120
各个阶段所消耗时间一目了然。
show profile具体写法为 Show profile TYPE for query n,n为query_id,TYPE可写可不写
TYPE的取值有为ALL、BLOCK IO、CONTEXT SWITCHES、CPU、IPC、MEMORY、PAGE FAULTS、SOURCE、SWAPS
如上述例子中
SHOW PROFILE CPU,MEMORY FOR QUERY 120
不加for query n这句,则展示执行show profile之前执行过一条语句。
4、Mysqladmin 查询整个数据库的状态
在mysql的bin目录下,执行
./mysqladmin -u用户名 -p密码 proc stat
这里添加proc就如同show full processlist功效
stat展示当前数据库的状态
threads 表示当前线程数,Opens 当前打开的表数目,Queries per second 每秒执行的查询数,数据库性能越好,这个值就越高
bitsCN.com

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

Oracle不僅是數據庫公司,還是雲計算和ERP系統的領導者。 1.Oracle提供從數據庫到雲服務和ERP系統的全面解決方案。 2.OracleCloud挑戰AWS和Azure,提供IaaS、PaaS和SaaS服務。 3.Oracle的ERP系統如E-BusinessSuite和FusionApplications幫助企業優化運營。

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

SQL是一種用於管理關係數據庫的標準語言,而MySQL是一個使用SQL的數據庫管理系統。 SQL定義了與數據庫交互的方式,包括CRUD操作,而MySQL實現了SQL標準並提供了額外的功能,如存儲過程和触發器。

文章首段摘要:在選擇開發 Yi 框架應用程序的軟件時,需要考慮多個因素。雖然原生移動應用程序開發工具(如 XCode 和 Android Studio)可以提供強大的控制和靈活性,但跨平台框架(如 React Native 和 Flutter)憑藉其編寫一次,即可部署到多個平台的優點而越來越受歡迎。對於剛接觸移動開發的開發者,低代碼或無代碼平台(如 AppSheet 和 Glide)可以快速輕鬆地構建應用程序。另外,雲服務提供商(如 AWS Amplify 和 Firebase)提供了全面的工具

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显著提升其性能。
