当前位置:网站首页>Show profile analysis of SQL statement performance overhead
Show profile analysis of SQL statement performance overhead
2020-11-09 10:51:00 【osc_jrhexi1r】
Preface
In the project , We use sql sentence , does CRUD, He counted hundreds of database servers ( Nonsense ), Come to the conclusion , Eighty percent of their performance goes to queries , modify , newly added , The deletion of three modules together accounts for 20% .
therefore , We are right. SQL The optimization of the , It's basically reflected in select On .
Step one : Illustrate with examples SQL The concept of time
I'll give a few examples to illustrate , Let's talk about sql Execution time has a simple concept .
scene :
I have two tables now , A watch has 5000 Data , The other one has 50000 Data .
audit_legal :5000 Data .
resource:50000 Data .
Case a : Inquire about 1000 Data , Is the speed of the two watches the same .
One is used 21ms, One is used 243ms, The results of .
Even if you query the same data , If the base number is different , So the query time is different .
Here's why :
Without index , We implement a rule sql sentence , Table is global traversal , Disk addressing , Even if logically adjacent records are on disk, they are not necessarily physically adjacent , The larger the base , The longer the query time .
The request response time of the access interface in the project is usually in 200ms within , higher than 200ms The interface of , Hey , No problem if you don't ask too much .
Be careful. :
Directly in MySQL Visual interface execution sql It takes much longer to access this interface to get a response , Because the bullet's going to fly for a while .
Case 2 : Add index , How many times has the query efficiency been improved .
stay resource This table is tested ,
Two times :
1、 Query through the primary key .
2、 Query through ordinary fields .
With a watch , The same data :
One is almost time-consuming ,0.00025s, The other used 1.378s, So the index is very strong , If someone asks you , Add index , How many times has the query efficiency been improved . Then he must be a hammer , Different bases , The multiple of query efficiency is different .
One more question ,MySQL When the amount of data in a single table of the database is , Efficiency has basically reached its limit .
Ten million pieces of data , The answer is here :
https://blog.csdn.net/numbbe/article/details/109300087
Step two : Open the database analysis function
Before opening , Let's first introduce an English word :profiling
Its Chinese is analysis . We'll use it all the time .
Enter the command line :
SHOW VARIABLES LIKE ‘%pro%’;
We see two parameters :
profiling:
Determine whether the parsing function is on ,mysql Default off/0 close ,on/1 For opening .
After opening , After that SQL,mysql The server will record this sql System overhead of , such as cpu,io, Memory consumption, etc .
profiling_history_size:
Retention analysis profiling Number , The scope is 0-100, by 0 when , Turn off the function .
Step three :MySQL Teach you how to play profiling
I certainly didn't say mysql Teaching major , So let's see MySQL How do you say .
Enter the command line :
HELP PROFILE;
I will mysql Of example, Copy here .
wow , How long , Don't look at , Flip down , I'll translate the urine .
NAME description EXAMPLE
SHOW PROFILE Syntax:
SHOW PROFILE [TYPE [, TYPE] ... ]
[FOR QUERY n]
[LIMIT ROW_COUNT [OFFSET OFFSET]]
TYPE: {
ALL
| BLOCK IO
| CONTEXT SWITCHES
| CPU
| IPC
| MEMORY
| PAGE FAULTS
| SOURCE
| SWAPS
}
The SHOW PROFILE AND SHOW PROFILES statements display profiling
information that indicates resource USAGE FOR statements executed
during the course of the current session.
*Note*:
The SHOW PROFILE AND SHOW PROFILES statements are deprecated AND will
be removed IN a future MySQL release. USE the Performance SCHEMA
instead; see
https://dev.mysql.com/doc/refman/5.7/en/performance-SCHEMA-QUERY-profil
ing.html.
TO control profiling, USE the profiling SESSION variable, which has a
DEFAULT VALUE of 0 (OFF). ENABLE profiling BY setting profiling TO 1 OR
ON:
mysql> SET profiling = 1;
SHOW PROFILES displays a LIST of the most recent statements sent TO the
server. The size of the LIST IS controlled BY the
profiling_history_size SESSION variable, which has a DEFAULT VALUE of
15. The maximum VALUE IS 100. Setting the VALUE TO 0 has the practical
effect of disabling profiling.
ALL statements are profiled except SHOW PROFILE AND SHOW PROFILES, so
you will find neither of those statements IN the PROFILE list.
Malformed statements are profiled. FOR EXAMPLE, SHOW PROFILING IS an
illegal statement, AND a syntax error occurs IF you try TO EXECUTE it,
but it will SHOW up IN the profiling list.
SHOW PROFILE displays detailed information about a single statement.
Without the FOR QUERY n clause, the output pertains TO the most
recently executed statement. IF FOR QUERY n IS included, SHOW PROFILE
displays information FOR statement n. The VALUES of n correspond TO the
Query_ID VALUES displayed BY SHOW PROFILES.
The LIMIT ROW_COUNT clause may be given TO LIMIT the output TO
ROW_COUNT rows. IF LIMIT IS given, OFFSET OFFSET may be added TO BEGIN
the output OFFSET ROWS INTO the FULL SET of rows.
BY DEFAULT, SHOW PROFILE displays STATUS AND Duration columns. The
STATUS VALUES are LIKE the State VALUES displayed BY SHOW PROCESSLIST,
although there might be SOME minor differences IN interpretion FOR the
two statements FOR SOME STATUS VALUES (see
https://dev.mysql.com/doc/refman/5.7/en/thread-information.html).
Optional TYPE VALUES may be specified TO display SPECIFIC additional
TYPES of information:
o ALL displays ALL information
o BLOCK IO displays counts FOR block input AND output operations
o CONTEXT SWITCHES displays counts FOR voluntary AND involuntary
context switches
o CPU displays USER AND system CPU USAGE times
o IPC displays counts FOR messages sent AND received
o MEMORY IS NOT currently implemented
o PAGE FAULTS displays counts FOR major AND minor page faults
o SOURCE displays the NAMES of functions FROM the source CODE, together
WITH the NAME AND line number of the FILE IN which the FUNCTION
occurs
o SWAPS displays swap counts
Profiling IS enabled per session. WHEN a SESSION ENDS, its profiling
information IS lost.
URL: https://dev.mysql.com/doc/refman/5.7/en/SHOW-profile.html
mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
| 0 |
+-------------+
1 ROW IN SET (0.00 sec)
mysql> SET profiling = 1;
QUERY OK, 0 ROWS affected (0.00 sec)
mysql> DROP TABLE IF EXISTS t1;
QUERY OK, 0 ROWS affected, 1 warning (0.00 sec)
mysql> CREATE TABLE T1 (id INT);
QUERY OK, 0 ROWS affected (0.01 sec)
mysql> SHOW PROFILES;
+----------+----------+--------------------------+
| Query_ID | Duration | QUERY |
+----------+----------+--------------------------+
| 0 | 0.000088 | SET PROFILING = 1 |
| 1 | 0.000136 | DROP TABLE IF EXISTS t1 |
| 2 | 0.011947 | CREATE TABLE t1 (id INT) |
+----------+----------+--------------------------+
3 ROWS IN SET (0.00 sec)
mysql> SHOW PROFILE;
+----------------------+----------+
| STATUS | Duration |
+----------------------+----------+
| checking permissions | 0.000040 |
| creating TABLE | 0.000056 |
| AFTER CREATE | 0.011363 |
| QUERY END | 0.000375 |
| freeing items | 0.000089 |
| logging slow QUERY | 0.000019 |
| cleaning up | 0.000005 |
+----------------------+----------+
7 ROWS IN SET (0.00 sec)
mysql> SHOW PROFILE FOR QUERY 1;
+--------------------+----------+
| STATUS | Duration |
+--------------------+----------+
| QUERY END | 0.000107 |
| freeing items | 0.000008 |
| logging slow QUERY | 0.000015 |
| cleaning up | 0.000006 |
+--------------------+----------+
4 ROWS IN SET (0.00 sec)
mysql> SHOW PROFILE CPU FOR QUERY 2;
+----------------------+----------+----------+------------+
| STATUS | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| checking permissions | 0.000040 | 0.000038 | 0.000002 |
| creating TABLE | 0.000056 | 0.000028 | 0.000028 |
| AFTER CREATE | 0.011363 | 0.000217 | 0.001571 |
| QUERY END | 0.000375 | 0.000013 | 0.000028 |
| freeing items | 0.000089 | 0.000010 | 0.000014 |
| logging slow QUERY | 0.000019 | 0.000009 | 0.000010 |
| cleaning up | 0.000005 | 0.000003 | 0.000002 |
+----------------------+----------+----------+------------+
7 ROWS IN SET (0.00 sec)
Here's how to use profile command , Its grammar is introduced , Its parameters are introduced .
SHOW PROFILE Syntax:
grammar
SHOW PROFILE [TYPE [, TYPE] ... ] type It's the following type
[FOR QUERY n] there n yes sql Statement code .
[LIMIT ROW_COUNT [OFFSET OFFSET]]
Parameters
TYPE: {
ALL Show all the overhead information .
| BLOCK IO IO expenses .
| CONTEXT SWITCHES Context overhead .
| CPU CPU expenses .
| IPC Sending and receiving overhead .
| MEMORY Memory overhead .
| PAGE FAULTS Page error overhead .
| SOURCE source expenses .
| SWAPS Exchange times overhead .
}
Illustrate with examples :
SHOW PROFILE CPU FOR QUERY 2; Inquire about 2 Number SQL Of CPU Spending .
The following is an English translation , use CSDN Translated ( stay CSDN I don't want to translate in the advertisement ), Capable students can read the above English .
Bloggers suggest that , Copy this Chinese paragraph into your own notepad++ And so on , It doesn't look good here , Is too small .
It's better to have a look at this passage , Don't stop watching just because I said it was a translator .
It's not just translation , I have my own words in it , There is a lot of knowledge .
Eleven sentences in all .
1、SHOW PROFILE and SHOW PROFILES Statement displays the statement according to the configuration file session Information about resource usage performed during .
2、SHOW PROFILE and SHOW PROFILES Statement is obsolete and will be in the future MySQL Delete... In version . Use Performance Schema replace .
# what , There will be no more profile This thing , Let's go .
3、 To control the analysis , Please use the parse session variable , This variable has a default value of 0( close ). By setting the analysis to 1 Or enable analysis on:
4、SHOW PROFILES Displays a list of the latest statements sent to , The size of the server list is determined by profile_history_size Session variables determine , The default value is 15 The maximum value is 100. Set the value to 0 Has the effect of disabling analysis .
5、 except SHOW PROFILE and SHOW PROFILES Outside , All statements will be analyzed , So you can't find these statements in the profile list .
6、profile Malformed statements . for example ,SHOW PROFILING It's an illegal statement , If you try to execute the statement , There will be grammatical errors , But it will appear in the analysis list .
7、show profile Statement displays detailed information about a single statement . without for query n Clause , The output belongs to the most recently executed statement . If you include FOR QUERY n, Is displayed PROFILE, Show statement n Information about .n The value of corresponds to the query SHOW PROFILES According to the ID value .
8、 have access to LIMIT ROW_COUNT Clause limits the output to a number of lines . If a limit is given , You can add an offset at the beginning , Put the output offset rows into the complete row set .
9、 By default ,show profile Show status and duration Columns . Two fields , The state value is similar to SHOW PROCESSLIST The displayed status value , You can specify an optional type value to display the information type of a specific added value .
10、show profile Statement parameter type interpretation , It corresponds to the nine parameters above .
ALL Show all information
BLOCK IO block IO Displays the count of block input and output operations
CONTEXT SWITCHES Context switch
CPU CPU Show users and systems CPU Use your time
IPC IPC Displays the count of messages sent and received
MEMORY Memory is not currently implemented
PAGE FAULTS Page errors displays the count of primary and secondary page errors
SOURCE SOURCE Displays the name of the function in the source code or the name and line number of the file where the function is located
SWAPS Exchange shows the switch count
11、 Enable analysis for each session , At the end of the conversation , Its analysis information will be lost .
Step four : analysis MySQL Teaching example.
Execute the command line , Turn on sql Analysis function :
SHOW VARIABLES LIKE ‘%pro%’;
SET profiling = 1;
SELECT @@profiling; To see if it's turned on
Carry out orders :
SELECT COUNT(*) FROM laoben;
SHOW PROFILES;
You can see above select Ordered query_id by 5, The time consumed is 0.00078257s.
Carry out orders :
SHOW PROFILE;
This command shows the previous one sql Statement execution , By default, there are two fields .
status,duration. State and duration .
Carry out orders : Specified field , Appoint query_id, see cpu,io expenses .
SHOW PROFILE cpu,block io FOR QUERY 11;
版权声明
本文为[osc_jrhexi1r]所创,转载请带上原文链接,感谢
边栏推荐
- Shoes? Forecasting stock market trends? Taobao second kill? Python means what you want
- In 2020, what are the best tools for Android developers to break the cold winter?
- Natural language processing (NLP) roadmap - KDnuggets
- Looking for better dynamic getter and setter solutions
- 使用CopyMemory API出现 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- 无法启动此程序,因为计算机中丢失 MSVCP120.dll。尝试安装该程序以解决此问题
- 微信圈子
- 050_ object-oriented
- Commodity management system -- implementation of local preservation of new commodities
- SQL第二章第三章
猜你喜欢
随机推荐
Three ways to operate tables in Apache iceberg
2020.11.07面试总结(面试12k)
Mac 终端(terminal) oh-my-zsh+solarized配置
基于synchronized锁的深度解析
GLSB涉及负载均衡算法
程序人生|从网瘾少年到微软、BAT、字节offer收割机逆袭之路
Python零基础入门教程(01)
Review of hot spots of last week (11.2-11.8)
The file size uploaded by WordPress import exceeds php.ini Upload defined in_ max_ Filesize value -- & gt; solution.
Deng Junhui's notes on data structure and algorithm learning - Chapter 9
Elasticsearch原理解析与性能调优
linx7.5 初始安装
SQL第二章第三章
nodejs学习笔记(慕课网nodejs从零开发web Server博客项目)
开源ERP招聘了
ThinkPHP门面源码解析
MapStruct 解了对象映射的毒
[Python from zero to one] 5. Detailed explanation of beautiful soup basic syntax of web crawler
Investigation of solutions to rabbitmq cleft brain problem
Android 解决setRequestedOrientation之后手机屏幕的旋转不触发onConfigurationChanged方法