日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql状态查询

發布時間:2023/12/20 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql状态查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mysql狀態查詢

Mysql 可以通過指令去了解數據庫的情況。記一下常用的查看狀態的指令。

mysql狀態

?通過 SHOW STATUS 可以提供服務器狀態信息,也可以使用 mysqladmin extende d-status 命令獲得。 SHOW STATUS 可以根據需要顯示 session 級別的統計結果和 global級別的統計結果。

show status; Aborted_clients 由于客戶沒有正確關閉連接已經死掉,已經放棄的連接數量。 Aborted_connects 嘗試已經失敗的MySQL服務器的連接的次數。 Connections 試圖連接MySQL服務器的次數。 Created_tmp_tables 當執行語句時,已經被創造了的隱含臨時表的數量。 Delayed_insert_threads 正在使用的延遲插入處理器線程的數量。 Delayed_writes 用INSERT DELAYED寫入的行數。 Delayed_errors 用INSERT DELAYED寫入的發生某些錯誤(可能重復鍵值)的行數。 Flush_commands 執行FLUSH命令的次數。 Handler_delete 請求從一張表中刪除行的次數。 Handler_read_first 請求讀入表中第一行的次數。 Handler_read_key 請求數字基于鍵讀行。 Handler_read_next 請求讀入基于一個鍵的一行的次數。 Handler_read_rnd 請求讀入基于一個固定位置的一行的次數。 Handler_update 請求更新表中一行的次數。 Handler_write 請求向表中插入一行的次數。 Key_blocks_used 用于關鍵字緩存的塊的數量。 Key_read_requests 請求從緩存讀入一個鍵值的次數。 Key_reads 從磁盤物理讀入一個鍵值的次數。 Key_write_requests 請求將一個關鍵字塊寫入緩存次數。 Key_writes 將一個鍵值塊物理寫入磁盤的次數。 Max_used_connections 同時使用的連接的最大數目。 Not_flushed_key_blocks 在鍵緩存中已經改變但是還沒被清空到磁盤上的鍵塊。 Not_flushed_delayed_rows 在INSERT DELAY隊列中等待寫入的行的數量。 Open_tables 打開表的數量。 Open_files 打開文件的數量。 Open_streams 打開流的數量(主要用于日志記載) Opened_tables 已經打開的表的數量。 Questions 發往服務器的查詢的數量。 Slow_queries 要花超過long_query_time時間的查詢數量。 Threads_connected 當前打開的連接的數量。 Threads_running 不在睡眠的線程數量。 Uptime 服務器工作了多少秒。
  • 如果opened_tables太大,應該把my.cnf中的table_cache變大

  • 如果Key_reads太大,則應該把my.cnf中key_buffer_size變大.可以用Key_reads/Key_read_requests計算出cache失敗率

  • 如果Handler_read_rnd太大,則你寫的SQL語句里很多查詢都是要掃描整個表,而沒有發揮索引的鍵的作用

  • 如果Threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用Threads_created/Connections計算cache命中率?

  • 如果Created_tmp_disk_tables太大,就要增加my.cnf中tmp_table_size的值,用基于內存的臨時表代替基于磁盤的

  • SHOW PROCESSLIST

    查看當前正在進行的進程,對于有鎖表等情況的排查很有用處 。默認顯示100條,SHOW FULL PROCESSLIST; 顯示所有。

    SHOW PROCESSLIST; id列:一個標識,你要kill 一個語句的時候很有用。 user列: 顯示當前用戶,如果不是root,這個命令就只顯示你權限范圍內的sql語句。 host列:顯示這個語句是從哪個ip 的哪個端口上發出的。可用來追蹤出問題語句的用戶。 db列:顯示這個進程目前連接的是哪個數據庫。 command列:顯示當前連接的執行的命令,一般就是休眠(sleep),查詢(query),連接(connect)。 time列:此這個狀態持續的時間,單位是秒。 state列:顯示使用當前連接的sql語句的狀態,很重要的列,后續會有所有的狀態的描述,請注意,state只是語句執行中的某一個狀態,一個sql語句,已查詢為例,可能需要經過copying to tmp table,Sorting result,Sending data等狀態才可以完成。 info列:顯示這個sql語句,因為長度有限,所以長的sql語句就顯示不全,但是一個判斷問題語句的重要依據。

    State 列詳解:(當前sql跑在什么狀態下)

    Checking table 正在檢查數據表(這是自動的)。 Closing tables 正在將表中修改的數據刷新到磁盤中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,就應該確認磁盤空間是否已經滿了或者磁盤是否正處于重負中。 Connect Out 復制從服務器正在連接主服務器。 Copying to tmp table on disk 由于臨時結果集大于 tmp_table_size,正在將臨時表從內存存儲轉為磁盤存儲以此節省內存。 Creating tmp table 正在創建臨時表以存放部分查詢結果。 deleting from main table 服務器正在執行多表刪除中的第一部分,剛刪除第一個表。 deleting from reference tables 服務器正在執行多表刪除中的第二部分,正在刪除其他表的記錄。 Flushing tables 正在執行 FLUSH TABLES,等待其他線程關閉數據表。 Killed 發送了一個kill請求給某線程,那么這個線程將會檢查kill標志位,同時會放棄下一個kill請求。MySQL會在每次的主循環中檢查kill標志位,不過有些情況下該線程可能會過一小段才能死掉。如果該線程程被其他線程鎖住了,那么kill請求會在鎖釋放時馬上生效。 Locked 被其他查詢鎖住了。 Sending data 正在處理 SELECT 查詢的記錄,同時正在把結果發送給客戶端。 Sorting for group 正在為 GROUP BY 做排序。 Sorting for order 正在為 ORDER BY 做排序。 Opening tables 這個過程應該會很快,除非受到其他因素的干擾。例如,在執 ALTER TABLELOCK TABLE 語句行完以前,數據表無法被其他線程打開。 正嘗試打開一個表。 Removing duplicates 正在執行一個 SELECT DISTINCT 方式的查詢,但是MySQL無法在前一個階段優化掉那些重復的記錄。因此,MySQL需要再次去掉重復的記錄,然后再把結果發送給客戶端。 Reopen table 獲得了對一個表的鎖,但是必須在表結構修改之后才能獲得這個鎖。已經釋放鎖,關閉數據表,正嘗試重新打開數據表。 Repair by sorting 修復指令正在排序以創建索引。 Repair with keycache 修復指令正在利用索引緩存一個一個地創建新索引。它會比 Repair by sorting 慢些。 Searching rows for update 正在講符合條件的記錄找出來以備更新。它必須在 UPDATE 要修改相關的記錄之前就完成了。 Sleeping 正在等待客戶端發送新請求. System lock 正在等待取得一個外部的系統鎖。如果當前沒有運行多個 mysqld 服務器同時請求同一個表,那么可以通過增加 –skip-external-locking參數來禁止外部系統鎖。 Upgrading lock INSERT DELAYED 正在嘗試取得一個鎖表以插入新記錄。 Updating 正在搜索匹配的記錄,并且修改它們。 User Lock 正在等待 GET_LOCK()。 Waiting for tables 該線程得到通知,數據表結構已經被修改了,需要重新打開數據表以取得新的結構。然后,為了能的重新打開數據表,必須等到所有其他線程關閉這個表。
    show com
    SHOW STATUS like "Com_%"; #全局級別: show global status like "Com_%"; #全局級別:
  • ?Com_select 執行 select 操作的次數,一次查詢只累加 1 ;

  • ?Com_insert 執行 insert 操作的次數,對于批量插入的 insert 操作,只累加一次 ;

  • Com_update 執行 update 操作的次數;

  • Com_delete 執行 delete 操作的次數;

  • 通過以上幾個參數,可以很容易的了解當前數據庫的應用是以插入更新為主還 是以查詢操作為主,以及各種類型的 SQL大致的執行比例是多少。對于更新操作的計 數,是對執行次數的計數,不論提交還是回滾都會累加。 對于事務型的應用,通過 Com_commit 和 Com_rollback 可以了解事務提交和回 滾的情況,對于回滾操作非常頻繁的數據庫,可能意味著應用編寫存在問題。此外,以下幾個參數便于我們了解數據庫的基本情況:

    • Connections 試圖連接 Mysql 服務器的次數

    • Uptime 服務器工作時間

    • Slow_queries 慢查詢的次數

    慢查詢

    通過設置慢查詢時間以及對應的文件能夠把慢查詢記錄,以便以后做分析。

    show variables like '%slow%';

    • slow_launch_time 表明2s 為慢查詢的界限

    show global status like 'max_used_connections'; ?


    以上表示慢查詢為2s,一共618條慢查詢。

    開啟慢查詢

    通過配置my.cnf。

    安裝完成后可能還沒有配置文件,需要自己創建。

    MySQL啟動時會讀取配置文件my.cnf,讀取次序依次為 /etc/my.cnf、/etc/mysql/my.cnf、/usr/local/etc/my.cnf、~/.my.cnf。安裝完MySQL后可能上述位置上都沒有my.cnf文件,要想指定配置文件,可以將MySQL安裝目錄下的示例配置文件拷貝到對應位置。

    Linux下找到mysql的配置文件my.ini, 在mysqld下方加入慢查詢的配置語句(注意:一定要在[mysqld]下的下方加入)




    查看慢查詢工具

    查看慢查詢 可以使用mysql自帶的慢查詢日志工具 mysqldumpslow

    慢日志格式
    # Time: 2016-12-22T09:41:17.777439Z # User@Host: homestead[homestead] @ [192.168.10.1] Id: 1543 # Query_time: 2.001423 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 use homestead; SET timestamp=1482399677; select sleep(2);

    主要功能是, 統計不同慢 sql 下面這些屬性:

    • 出現次數(Count),

    • 執行最長時間(Time),

    • 累計總耗費時間(Time),

    • 等待鎖的時間(Lock),

    • 發送給客戶端的行總數(Rows),

    • 掃描的行總數(Rows),

    • 用戶以及sql語句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).

    講一下有用的參數:

    -s 排序選項:

    c 查詢次數

    r 返回記錄行數 t 查詢時間 -t num 只顯示 top n 條查詢 其他參數可以使用 -h 命令進行查看

    參考: https://blog.csdn.net/zhangliangzi/article/details/51884863

    總結

    以上是生活随笔為你收集整理的mysql状态查询的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。