翻譯|使用教程|編輯:莫成敏|2019-10-14 13:36:07.257|閱讀 656 次
概述:Navicat Premium 是一套數據庫管理工具,讓你使用一個程序即可同時連接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 數據庫。本文主要介紹MySQL 8性能架構如何幫助診斷查詢死鎖。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Navicat Premium 是一套數據庫管理工具,讓你使用一個程序即可同時連接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 數據庫。
MySQL 5.5增加了performance_schema和information_schema數據庫。正如前面文章內容,information_schema中的表包含有關表、插件、分區、進程列表、狀態和全局變量的統計信息。顧名思義,Performance_schema的表可用于改善MySQL實例的性能。如何做到這一點將成為今天文章的主題。就像上次一樣,我們將使用Navicat Premium演示各種查詢。
簡要概述
性能模式是一種用于在低級別監視MySQL服務器執行的工具。性能架構的存儲引擎共享了“performance_schema”名稱,以便于與其他存儲引擎區分開。擁有自己的引擎使我們能夠訪問有關服務器執行的信息,同時對服務器性能的影響最小。此外,它使用視圖或臨時表,以最大程度地減少持久性磁盤存儲。最后,內存分配全部在服務器啟動時完成,因此沒有進一步的內存重新分配或大小調整,這極大地簡化了性能。
從MySQL 5.6.6起默認啟用性能模式。在該版本之前,默認情況下處于禁用狀態。您可以使用以下語句驗證其狀態:
如果需要,可以始終通過使用——performance-schema = ON標志啟動服務器來顯式啟用它。
現在,我們來看看Performance_schema的一些實際應用。
互斥鎖和線程速成班
互斥鎖是代碼中使用的一種同步機制,用于強制在給定時間只有一個線程可以訪問某些公共資源。據說該資源已由互斥鎖“保護”。“Mutex”一詞是“互斥變量”的非正式縮寫,它本身是“互斥”的縮寫。在MySQL中,它是InnoDB用于表示和強制對內部內存數據結構進行互斥鎖的低級對象。運作方式如下:
一旦獲取了鎖,就可以防止任何其他進程,線程等獲取相同的鎖。在InnoDB中,執行的多個線程訪問共享的數據結構。InnoDB將這些訪問與自己的互斥鎖和讀/寫鎖實現同步。當服務器中執行的兩個線程(例如,同時執行查詢的兩個用戶會話)需要訪問相同的資源(例如文件、緩沖區或某些數據)時,這兩個線程將相互競爭,因此獲得互斥鎖的第一個查詢將導致另一個查詢等待,直到第一個查詢完成并解鎖互斥鎖。如果第一個線程需要很長時間才能完成,則它可能會阻止其他進程。
一些有用的查詢
所有互斥鎖都在“性能模式”的Mutex_instances表中列出,這對于調查性能瓶頸非常有幫助。Mutex_instances.LOCKED_BY_THREAD_ID和rwlock_instances.WRITE_LOCKED_BY_THREAD_ID列對于調查性能瓶頸或死鎖非常重要。使用方法如下:
假設線程1處于等待互斥的狀態。
您可以確定線程正在等待什么:
如果查詢結果標識線程正在等待互斥鎖A,可在events_waits_current.OBJECT_INSTANCE_BEGIN中找到。
您可以確定哪個線程持有互斥鎖A:
假設查詢結果表明它是持有互斥鎖A的線程2,如在Mutex_instances.LOCKED_BY_THREAD_ID中找到的那樣。
您可以使用此查詢查看線程2在做什么:
結論
在今天的文章中,我們學習了如何使用性能模式來診斷MySQL 8中的瓶頸和/或死鎖。一種更簡單的方法是使用Navicat Monitor。它具有一個查詢分析器,該分析器顯示所有正在執行的查詢的摘要信息,并讓您輕松檢測死鎖,例如當兩個或多個查詢永久相互阻塞時。
相關內容推薦:
想要購買該產品正版授權,或了解更多產品信息請點擊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn