日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql myisam 去掉表锁a_MyISAM表锁的解决方案

發布時間:2023/12/19 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql myisam 去掉表锁a_MyISAM表锁的解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Table_locks_immediate和Table_locks_waited兩個狀態:

Table_locks_immediate表示立即釋放表鎖數,Table_locks_waited表示需要等待的表鎖數,

如果Table_locks_immediate / Table_locks_waited > 5000,說明不嚴重,

因為InnoDB是行鎖而MyISAM是表鎖,對于高并發寫入的應用InnoDB效果會好些。

示例中的服務器Table_locks_immediate / Table_locks_waited = 235,MyISAM不太好。

?Table_locks_immediate

The number of times that a request for a table lock could be granted immediately.

?Table_locks_waited

The number of times that a request for a table lock could not be granted immediately and a wait was needed. If this is high and you have performance problems, you should first optimize your queries, and then either split your table or tables or use replication.

實際上應該關心的是Table_locks_waited的值

這是我們服務器上的一個值

mysql> show global status like 'table%';

+-----------------------+---------+

| Variable_name???????? | Value?? |

+-----------------------+---------+

| Table_locks_immediate | 1147514 |

| Table_locks_waited??? | 135???? |

+-----------------------+---------+

解決方案大概有如下幾種:

MyISAM存儲引擎有一個系統變量concurrent_insert,專門用以控制其并發插入的行為,其值分別可以為0、1或2。

0 不允許并發操作

1 如果MyISAM表中沒有空洞(即表的中間沒有被刪除的行),MyISAM允許在一個進程讀表的同時,另一個進程從表尾插入記錄。這也是MySQL的默認設置。

2 無論MyISAM表中有沒有空洞,都允許在表尾并發插入記錄

使用--low-priority-updates啟用mysqld。這將給所有更新(修改)一個表的語句以比SELECT語句低的優先級。在這種情況下,在先前情形的最后的SELECT語句將在INSERT語句前執行。

為max_write_lock_count設置一個低值,使得在一定數量的WRITE鎖定后,給出READ鎖定

使用LOW_PRIORITY屬性給于一個特定的INSERT,UPDATE或DELETE較低的優先級

使用HIGH_PRIORITY屬性給于一個特定的SELECT

使用INSERT DELAYED語句

綜合自己的業務需求,使用了方案2。看來需要不斷監測服務器狀態,再進行更合適的調整。

總結

以上是生活随笔為你收集整理的mysql myisam 去掉表锁a_MyISAM表锁的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。