mysql表級鎖有兩種模式:表共享讀鎖(table read lock)和表獨佔寫鎖(table write lock)。什麼意思呢,就是說對myisam表進行讀操作時,它不會阻塞其他使用者對同一表的讀請求,但會阻塞 對同一表的寫操作;而對myisam表的寫操作,則會阻塞其他使用者對同一表的讀和寫操作。
innodb行鎖是通過給索引項加鎖來實現的,即只有通過索引條件檢索資料,innodb才使用行級鎖,否則將使用表鎖!行級鎖在每次獲取鎖和釋放鎖的操作需要消耗比表鎖更多的資源。在innodb兩個事務發生死鎖的時候,會計算出每個事務影響的行數,然後回滾行數少的那個事務。當鎖定的場景中不涉及innodb的時候,innodb是檢測不到的。只能依靠鎖定超時來解決。
資料庫死鎖例子:
兩個sesison,第乙個update表t1,不要提交。第二個update表t2,不要提交。接著session1去update表t2,session2去update表t1,此時就發生死鎖了。
冷備份mysql和熱備份mysql:
冷備份就是直接cp所有的資料庫檔案。
熱備份:
1)myisam引擎。1、flush tables with read lock; 2、 cp……; 3、unlock tables;
作為資料庫伺服器的主機,最關鍵的就是主機的整體io效能,包括磁碟、記憶體以及各種io相關的板卡。
在mysql中,使用orderby 關鍵字,排序方式有兩種:
4.1版本以前的使用的是先取出需要排序的字段和整條記錄的指標,然後對需要排序的字段在指定的排序區進行排序,排序之後,再根據指標去取出相應的記錄。也就是說,這種演算法需要訪問資料兩次。從4.1版本開始,採取了改進演算法。一次性將所有的符合條件的記錄取出。這樣減少了隨機io(之前演算法排序之後去記錄為隨機io)。但是這種改進的方法極大的浪費了排序的時候所使用的記憶體。所以為了改進效能,query語句中盡量只取出我們需要的字段。
myql的profile可以用來分析查詢語句的cpu和io的使用情況。
[sql]view plain
copy
print?
set profiling=1
select
count(*) from
user;
show profiles;
show profile for query 1;
set profiling=1
select count(*) from user;
show profiles;
show profile for query 1;
最基本的我們可以從中看出,快取對於mysql的效能影響。提高速度近30倍。 myisam與innodb的儲存結構
一 常用的儲存引擎 二 儲存引擎特性區別 三 資料訪問方式 一 常用的儲存引擎 myisam innodb 二 儲存引擎特性區別 1.事務方面 innodb支援事務.myisam不支援事務 2.外來鍵方面 innodb支援外來鍵,myisam不支援外來鍵 3.索引方面 innodb是聚集索引 聚簇索...
InnoDB與MyISAM等儲存引擎對比
文章原文 blog.ouyangsihai.cn innodb與myisam等儲存引擎對比 innodb引擎是mysql的預設的儲存引擎,他有很多自己的特性,下面一一枚舉。行鎖設計,支援外來鍵,非鎖定讀。支援多版本的併發控制 mvcc 來獲得高併發性。提供了插入緩衝 二次寫 自適應雜湊索引 預讀等高...
InnoDB和MyISAM儲存引擎
mysql在檔案系統中將每個資料庫 也可以叫 schema 儲存為資料庫目錄下的乙個子目錄。建立表時,mysql會在資料庫子目錄下建立乙個和表同名的.frm檔案儲存表的定義。而 mysql會在資料庫子目錄下建立乙個和表同名的.frm檔案儲存表的定義。如 建立乙個名為a的表,mysql會在a.frm檔...