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