主頁 > 區塊鏈 > SHOW PROFILE分析SQL陳述句性能開銷

SHOW PROFILE分析SQL陳述句性能開銷

2020-11-08 17:38:41 區塊鏈

前言

在專案中,我們用的sql陳述句,無非就是CRUD,小老犇統計了數百臺資料庫服務器(胡說八道),得出結論,它們百分之八十的性能用在了查詢上,修改,新增,洗掉三個模塊共同占了百分之二十,
所以,我們對SQL的優化,基本體現在select上,

步驟一:舉例說明SQL時間概念

在這里我舉幾個例子來說明,讓大家對sql執行時間有一個簡單的概念,
場景:
我現在有兩張表,一張表有5000條資料,另一張表有50000條資料,
audit_legal :5000條資料,
resource:50000條資料,

案例一:查詢1000條資料,兩張表速度一樣嗎,

在這里插入圖片描述
在這里插入圖片描述
一個用了21ms,一個用了243ms,得出結果,
就算查詢同樣的資料,如果基數不一樣,那么查詢耗時不同,
原因如下:
在沒有索引的情況下,我們執行一條sql陳述句,表是進行全域遍歷,磁盤尋址,就算邏輯上相鄰的記錄在磁盤上也并不一定是物理相鄰的,基數越大,查詢時間也就越長,

專案中訪問介面的請求回應時間一般在200ms以內,高于200ms的介面,嘿嘿,要求不高就沒問題,
注意一點:
直接在MySQL可視化界面執行sql的時間要遠大于訪問這個介面獲得回應的時間,因為子彈要飛一會,

案例二:增加索引,查詢效率提升有多少倍,
在resource這張表進行測驗,
分兩次:
1、通過主鍵進行查詢,

在這里插入圖片描述
在這里插入圖片描述

2、通過普通欄位進行查詢,

在這里插入圖片描述
用一張表,同一條資料:
在這里插入圖片描述
一個幾乎不耗時,0.00025s,另一個用了1.378s,所以索引很牛逼,如果有人問你,增加索引,查詢效率提升有多少倍,那他一定是個錘子,不同基數,查詢效率倍數不一樣,
再問一個問題,MySQL資料庫單表資料量為多少時,效率基本就達到了極限,
一千萬條資料量,答案在這里:
https://blog.csdn.net/numbbe/article/details/109300087

步驟二:開啟資料庫分析功能

開啟之前,先介紹一個英文單詞:profiling
它的中文是分析,接下來會一直用到它,
輸入命令列:
SHOW VARIABLES LIKE ‘%pro%’;
在這里插入圖片描述
我們看到了兩個引數:
profiling:
確定分析陳述句功能是否開啟,mysql默認off/0關閉,on/1為開啟,
開啟后,之后執行的SQL,mysql服務器則會記錄該條sql的系統開銷,比如cpu,io,記憶體消耗等,
profiling_history_size:
保留分析profiling數量,范圍為0-100,為0時,即關閉該功能,

步驟三:MySQL教你怎么玩profiling

我說的肯定沒有mysql教的專業,所以我們看MySQL怎么說,
輸入命令列:
HELP PROFILE;
在這里插入圖片描述

我將mysql的example,拷貝到這里,
哇,好長啊,別看了,往下翻,我把尿文翻譯一下,

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)

這里講了如何使用profile命令,介紹了它的語法,介紹了它的引數,

SHOW PROFILE	Syntax:

語法
SHOW PROFILE [TYPE [, TYPE] ... ]	type是下面的type
    [FOR QUERY n]					這里的n是sql陳述句代號,
    [LIMIT ROW_COUNT [OFFSET OFFSET]]

引數
TYPE: {
    ALL					展示所有的開銷資訊,
  | BLOCK IO			IO開銷,
  | CONTEXT SWITCHES	背景關系開銷,
  | CPU					CPU開銷,
  | IPC					發送和接受開銷,
  | MEMORY				記憶體開銷,
  | PAGE FAULTS			頁面錯誤開銷,
  | SOURCE				source開銷,
  | SWAPS				交換次數開銷,
}

舉例說明:
SHOW PROFILE CPU FOR QUERY 2;	查詢2SQL的CPU開銷情況,
下面是一段英譯中,用CSDN翻譯的(在CSDN里不給某翻譯打廣告),有能力的同學可以看上邊的英文,
博主建議大家,將這段中文拷貝到自己的notepad++之類檔案打開,這里看著實在不順眼,太小了,
這段話最好還是看一看,不要因為我說是翻譯的就不看,
里邊不僅僅是翻譯,有我自己的話在其中,有很多知識,
一共十一句話,


1SHOW PROFILE和SHOW PROFILES陳述句根據組態檔顯示陳述句在本次session期間執行的資源使用情況的資訊,

2SHOW PROFILE和SHOW PROFILES陳述句已棄用并將在未來的MySQL版本中洗掉,使用Performance Schema替代,
# 納尼,以后就沒profile這個東西了,大家散了吧,

3、要控制分析,請使用分析會話變數,該變數具有默認值為0(關閉),通過將分析設定為1或啟用分析on4SHOW PROFILES顯示發送到的最新陳述句的串列,服務器串列的大小由profile_history_size會話變數決定,默認值為15最大值為100,將值設定為0具有禁用分析的效果,

5、除SHOW PROFILE和SHOW PROFILES外,所有陳述句都將被分析,因此您在概要檔案串列中找不到這些陳述句,

6、profile格式錯誤的陳述句,例如,SHOW PROFILING是一個非法陳述句,如果試圖執行該陳述句,則會出現語法錯誤,但它會出現在分析串列中,

7show profile陳述句顯示有關單個陳述句的詳細資訊,如果沒有for query n子句,則輸出屬于最近執行的陳述句,如果包含FOR QUERY n,則顯示PROFILE,顯示陳述句n的資訊,n的值對應于查詢SHOW PROFILES顯示的ID值,

8、可以使用LIMIT ROW_COUNT子句將輸出限制為數行,如果給定了限制,則可以在開始處添加偏移偏移量,將輸出偏移行放入完整的行集合中,

9、默認情況下,show profile顯示狀態和持續時間列,即兩個欄位,狀態值類似于SHOW PROCESSLIST顯示的狀態值,可以指定可選型別值來顯示特定的附加值的資訊型別,

10show profile陳述句引數型別解釋,和上邊的九個引數一一對應.
ALL						全部顯示所有資訊

BLOCK IO				塊IO顯示塊輸入和輸出操作的計數

CONTEXT SWITCHES		背景關系切換

CPU						CPU顯示用戶和系統CPU使用時間

IPC						IPC顯示發送和接收的訊息計數

MEMORY					當前未實作記憶體

PAGE FAULTS				頁面錯誤顯示主要和次要頁面錯誤的計數

SOURCE					SOURCE顯示源代碼中函式的名稱或者函式所在檔案的名稱和行號

SWAPS					交換顯示交換計數

11、為每個會話啟用分析,會話結束時,其分析資訊將丟失,


步驟四:決議MySQL的教學example,

執行命令列,開啟sql分析功能:
SHOW VARIABLES LIKE ‘%pro%’;

SET profiling = 1;

SELECT @@profiling; 用來查看是否開啟

在這里插入圖片描述

執行命令:
SELECT COUNT(*) FROM laoben;
SHOW PROFILES;
可以看出上方select命令的query_id為5,消耗時間為0.00078257s,
在這里插入圖片描述

執行命令:
SHOW PROFILE;
該命令顯示的是上一條sql陳述句的執行情況,默認包括兩個欄位,
status,duration,狀態和持續時間,
在這里插入圖片描述

執行命令:指定欄位,指定query_id,查看cpu,io開銷,
SHOW PROFILE cpu,block io FOR QUERY 11;
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/206874.html

標籤:區塊鏈

上一篇:《Oracle MySQL編程自學與面試指南》01:入門(Getting Started)

下一篇:狂神老師的MySQL學習筆記

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more