標籤:使用 io strong 檔案 資料 ar cti 代碼
MySQL是一個關係型資料庫,關聯的資料儲存在不同的表中,增加了資料操作的靈活性。
執行流程
MySQL是一個單進程服務,每一個請求用線程來響應,
流程:
1,客戶請求,伺服器開闢一個線程響應使用者。
2,使用者發起SQL請求,
3,查詢快取,並記錄使用者SQL,如果重新查詢,直接查緩衝。
4,沒有緩衝,進入分析器,
文法分析器:檢查文法
詞法分析器:將命令切片,按空格隔開,擷取表,內容和使用者權限。
5,最佳化執行直接選取,生產執行樹.
6,儲存引擎:用於管理隱藏檔系統,給上層應用提供不同管理。
那麼什麼是儲存引擎呢?
儲存引擎說白了就是如何儲存資料、如何為儲存的資料建立索引和如何更新、查詢資料等技術的實現方法。因為在關聯式資料庫中資料的儲存是以表的形式儲存的,所以儲存引擎也可以稱為表類型(即儲存和操作此表的類型)。在Oracle 和SQL Server等資料庫中只有一種儲存引擎,所有資料存放區管理機制都是一樣的。而MySql資料庫提供了多種儲存引擎。使用者可以根據不同的需求為資料表選擇不同的儲存引擎,使用者也可以根據自己的需要編寫自己的儲存引擎。
常用的儲存引擎:
myisam
MyISAM是預設儲存引擎。它基於更老的ISAM代碼,但有很多有用的擴充。(注意MySQL 5.1不支援ISAM)。 每個MyISAM在磁碟上儲存成三個檔案。第一個檔案的名字以表的名字開始,副檔名指出檔案類型。.frm檔案儲存體表定義。資料檔案的副檔名為·MYD (MYData)。
二進位檔案,可以在不同系統上用
InnoDB
1.3.1、innodb儲存引擎,特點支援外鍵、行鎖、非鎖定讀(預設情況下讀取不會產生鎖)、mysql-4.1開始支援每個innodb引擎的表單獨放到一個資料表空間裡。innodb通過使用MVCC多版本並發控制 來擷取高並發性,並且實現sql標準的4種隔離等級,同時使用一種被稱成next-key locking的策略來避免換讀(phantom)現象。除此之外innodb引擎還提供了插入緩衝(insert buffer)、二次寫(double write)、自適應哈西索引(adaptive hash index)、預讀(read ahead)等高效能技術。
1.3.2、myisam儲存引擎,myisam特點是不支援事物,適合olap應用,myisam表由MYD和MYI組成。mysql-5.0版本之前,myisam預設支援的表大小為4G,從mysql-5.0以後,myisam預設支援256T的表單資料。myisam只緩衝索引資料。
二.InnoDB儲存引擎
2.2、innodb引擎架構
InnoDB的多個記憶體塊組成了記憶體池,負責如下工作:
1).維護所有進程/線程需要訪問的多個內部資料結構。
2).緩衝磁碟上的資料,方便快速的讀取,並且在對磁碟檔案的資料進行修改之前在這裡緩衝。
3).重做日誌緩衝。
後台線程的主要作用是負責重新整理記憶體池中的資料,保證緩衝池中的記憶體緩衝是最近的資料,此外、將已經修改的資料檔案重新整理到磁碟檔案
2.2.1、後台線程
innodb儲存引擎後台有7個線程,—–4個IO線程(insert buffer thread,log thread,read thread,write thread),1個master thread,一個lock監控線程,一個錯誤監控線程。
2.2.2、記憶體
innodb儲存引擎記憶體由以下三個部分組成:緩衝池(buffer pool),重做日誌緩衝(redo log buffer),額外的記憶體池(additional memory pool)。可以使用 show engine innodb status來查看innodb_buffer_pool的使用方式。
innodb_buffer_pool_size:具體看,緩衝池中的資料庫類型有:索引頁、資料庫頁、undo頁、插入快取頁面(insert buffer)、自適應hash(adaptive hashindex)、innodb儲存的鎖資訊(lock info)、資料字典資訊(data dictionary)。
InnoDB工作方式:將資料檔案按頁(每頁16K)讀入InnoDBbuffer pool,然後按最近最少使用演算法(LRU)保留快取資料,最後通過一定頻率將髒頁重新整理到檔案。
被InnoDB儲存引擎管理的兩個重要的基於磁碟的資源是InnoDB資料表空間資料檔案和它的記錄檔。
如果你指定無InnoDB配置選項,MySQL將在MySQL資料目錄下建立一個名為ibdata1的10MB大小的自動擴充
資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的記錄檔。