Innodb存储引擎的特性(2)
生活随笔
收集整理的這篇文章主要介紹了
Innodb存储引擎的特性(2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于鎖還有兩個被經常提到的概念,就是阻塞和死鎖,我發現開發人員會經常混淆,兩種錯誤,所以我覺得有必要在這里強調一下,兩個鎖的問題,首先什么是阻塞呢,阻塞是因為不同鎖的兼容性的關系,在有些時刻,一個事務中的鎖,需要等待另一個事務鎖的釋放,他所占用的資源,這就形成了阻塞,比如我們前面演示的表級鎖時,第一個表對應myinnodb加了表級鎖,所以第二個連接要在表上加共享鎖呢,等待第一個表的排他鎖釋放,這樣第一個表的連接阻塞第二個連接,阻塞是為了確保事務的可以并發,且正常的運行,但是當一個系統中出現大量的阻塞,往往就意味著系統中存在問題,也許在一個頻繁更新的表上出現了慢查詢,或許是一些其他的管理操作,如alter table表備份時,頻繁的加上排他鎖,而過多的阻塞絕對不是一個好的現象,占用大量的系統資源,使得系統的性能整體的下降,那我們下來再來看看什么是死鎖,死鎖是指兩個或者兩個以上的事務,在執行過程中,相互占用對方產生的資源,而產生一種異常,從定義中可以看到,處在阻塞中的多個事務呢,占用了被阻塞事務的多個資源,而死鎖是占用對方的資源,這就是阻塞和死鎖最大不同之處,另外一點不同呢,死鎖數據庫會自動發現,并且在多個死鎖的事務中,選擇一個占用資源最小的事務呢,來進行回滾操作,這樣就可以使其他事務呢,正常運行了,死鎖是可以由系統自動處理的,如果只有少量的死鎖,并不會對系統產生什么樣的影響,只要在應用程序中發現死鎖并進行處理就可以了,但是如果一個系統中頻繁的出現大量的死鎖,這時就需要留意了,通常情況下死鎖可以通過在多個事務中,按照相同的順序訪問相同的資源,來解決,關于具體如何處理死鎖下面會有介紹,這里只是給大家強調一下,阻塞和死鎖是不同的,希望大家以后不要再混淆這個概念了
我們再來看一看除了鎖以外,Innodb其他特性,Innodb相對于其他引擎不同之處呢,還有一點就是,提供了一個獨特的性能監控工具,這個工具就是show engine innodb status命令,這個show命令呢,輸出內容包含了一些平均值統計信息,對于平均值呢,就是上次輸出結果后生成的統計數,如果想要使用show engine innodb status這個統計信息的話,那就要確保在兩次輸出之間至少要間隔30秒左右的時間,以便有足夠長的收集時間,進行多次采樣,還要說明的一點是,不同版本的innodb status的輸出呢,會有些不同,這里我使用的是MYSQL5.6的版本,我就以這個版本為例來給大家簡單的介紹一下,如何使用show engine innodb status這個命令,這個命令輸出內容比較多,所以我們就到演示系統中來做一個簡單的了解,下面我們就進入到我們的演示系統,來看一下show engine innodb status具體輸出是什么樣子的show engine innodb status \G
這里就是show engine的具體輸出了,首先我們來看一下第一部分的信息,是多長時間的一個統計,最近33秒,就是最近33秒的一個平均值,還顯示了后臺進程的進程信息,包括innodb的主進程,他的循環次數,還有一些sleep的次數,刷新的次數,這個演示系統是沒有任何負載的系統,所以看到他的循環是非常少的,只有一些信號的信息了,首先這些信號信息就包括一些等待信息啊,包括一些等待的信息
再接下來呢,事務信息,同樣由于我們的演示系統是沒有任何負載的,我們可以看到一個事務id,就是我們剛才show engine innodb status的這個連接,這個線程所執行的一個事務,接下來就是關于一些文件IO的信息,包括寫,Innodb的讀寫進程
innodb的讀寫進程,我在配置文件中也配置了很多,大家可以看到很多的讀寫進程,在默認情況下呢,4個讀進程,4個寫進程的,那么接下來就是一些緩存信息,包括insert buffer and hash索引的信息,這里就顯示了他的插入緩存,一些尺寸,以及合并的操作信息
大家可以看到呢,幾乎都是0,因此我們這張表是沒有任何負載的,沒有任何操作
下面就是一些log信息了,以及檢查點的一些信息,證明了我們的演示系統呢沒有任何負載,沒有事務的,下面就是一些緩存池的信息,這個就代表了總的內存分配,以及附加緩存池的信息,可以看到,下面就是一些行的操作信息,以及大家看到這里有一個插入的行只有24行,讀有66行,但是在一個生產環境系統中呢,統計值不應該是這個樣子的,他們都應該代表了一組數據,同時對于生產系統中呢,show engine innodb status呢,它會輸出更多的內容,比如死鎖信息,比如外鍵的錯誤信息,等等,如果大家對Innodb status感興趣的話,MYSQL的官方手冊,這里就不做過多介紹了
前面我們介紹了Innodb存儲引擎的特性,那么下面我們來看看Innodb引擎的適用場景,從上面的介紹呢,可以看到,Innodb存儲引擎呢,可以應用到大多數的在線處理,和應用場景中,從前有一種觀點,認為只有事務支持時呢,才需要Innodb存儲引擎,其實從上面的介紹呢,可以看出來,實際上無論是否需要事務支持,我們都應該使用Innodb存儲引擎,其中所說的特殊功能呢,可能就包括我們之前在介紹MYISAM中說過的,全文索引這些,由于在MYSQL5.7之前,只支持MYISAM存儲引擎,所以如果我們要使用MYSQL存儲這類數據的話呢,可能只能選擇MYISAM存儲引擎了,可是這種情況呢,在MYSQL5.7版本之后呢,已經有了改變,在MYSQL5.7版本之后呢,Innodb已經可以支持全文索引,和空間函數了,所以呢對于這類應用呢,也完全可以使用Innodb存儲引擎來進行存儲了,Innodb和MYISAM是MYSQL最常用的兩種存儲引擎,另外還有一些特殊功能的存儲引擎,在一些場景下呢,我們下面主要介紹一下,其中比較常用的存儲引擎,CSV
?
總結
以上是生活随笔為你收集整理的Innodb存储引擎的特性(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Innodb存储引擎的特性(1).
- 下一篇: 如何选择存储引擎