最近有同事经常问到一些metadata lock相关的问题,就顺便理一下吧,主要是整理下相关的连接和文档,标题写的有点大
——————————–
最初为了解决著名的bug#989,在MySQL5.5中开始引入了meta data lock;mdl允许一个事务涉及到的表、库信息直到事务结束都被维持,这样如果一条事务内的某个STATEMENT完成后,其他session发出一条DDL就会被阻塞;这解决了DDL/DML并发导致的复制中断问题。
不过用过5.5的人都知道,这玩意儿实际上太令人讨厌了,尤其是那阴魂不散的“wait for global read lock”或者“wait for table lock”之类的。当备份时的大查询,再来个DDL,哐当~故障发生..直接堵死…
在我们的内部alisql-5.5版本中,我们使用的是和facebook类似的办法(好吧,就是我直接从fb port过来的),即增加接口替换掉flush tables with read lock, 只创建一个read view ,外加返回当前binlog位点;另外percona也实现了一种类似的办法来绕过ftwrl,具体点击文档连接以及percona的博客, 不展开说了。
MDL解决了bug#989,却引入了一个新的热点,所有的mdl对象由于存到全局对象里;对于热点,最正常的想法当然是对其进行分区,不过这也是Mark Callaghan在report了bug#66473后才加入的,当时Mark观察到MDL_map::mutex的锁竞争非常高,进而推动官方改变;
在MySQL5.6.8版本,引入了新参数metadata_locks_hash_instances来控制对mdl hash的分区数(Rev:4350);
Oracle的QA dimitrik 对该特性的评测
不过后面的测试又发现哈希函数有问题,类似类似somedb.someprefix1….somedb.someprefix8的hash key值相同,都被hash到同一个桶下面了.相当于hash分区没生效。。。。坑!!具体怎么算的可以看bug#66473后面Dmitry Lenev的分析。
另外Mark也提出了质疑,innodb的hash计算函数比my_hash_sort_bin要更高效, Oracle的开发人员重开了个bug#68487来跟踪该问题,并在MySQL5.6.15对hash key计算函数进行优化,包括fix 上面说的hash计算问题(Rev:5459),使用MurmurHash3算法来计算mdl key的hash值,(有空看看几种hash函数到底哪个性能更好)
往后直到MySQL5.6.18版本都没有针对mdl部分的单独优化;很显然,后面也不会在5.6版本里出现了,因为mdl优化已经在5.7.4版本里展开了。包含3个worklog
1. WL#7304
简化DML操作对MDL锁的持有/释放;大体思路是把MDL锁拆分成两类,一类是DML的mdl(也成为unobtrusive lock),之间互相兼容,另一类是DDL的mdl(也称为obtrusive lock),与其他锁互斥;
针对DML的MDL,避免了复杂的锁检查和对m_waiting/m_granted链表的维护,改而使用计数器的方式来实现(称为fast-path);不过相应的对DDL的MDL锁的管理逻辑就变的复杂了。没有细看,貌似fast-path的mdl在遇到冲突时会进行转换,将其加入到m_granted列表中,并从m_fast_path_state移除
PATCH(Rev:7067, Rev:7129)
2. WL#7305
使用Lock free的hash对象来管理MDL;由于锁冲突被移除,因此metadata_locks_hash_instances及metadata_locks_cache_size在之后的版本中可能被弃用;
基本思路是使用LF_HASH(lock free hash, 而不是分区的hash)来实现MDL_MAP
PATCH(Rev:7249)
3. WL#7306
这个实际上是对WL#7304和WL#的进一步优化,针对dml的mdl锁(也就是所谓fast path),在检查冲突和释放时都需要施加m_rwlock锁,新的改进移除读写锁,改使用原子操作
PATCH(Rev:7586)
这三个worklog是在5.7.4版本中的主要影响性能的大改动之一,官方对MySQL5.7.4的测试数据,这部分的改进必然有所贡献。
后续的新的改进计划目前还没看到,现在worklog上的更新总要等到实现之后才会更新,让我们拭目以待吧…

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]

本文討論了使用Drop Table語句在MySQL中放下表,並強調了預防措施和風險。它強調,沒有備份,該動作是不可逆轉的,詳細介紹了恢復方法和潛在的生產環境危害。

本文討論了在PostgreSQL,MySQL和MongoDB等各個數據庫中的JSON列上創建索引,以增強查詢性能。它解釋了索引特定的JSON路徑的語法和好處,並列出了支持的數據庫系統。

文章討論了使用準備好的語句,輸入驗證和強密碼策略確保針對SQL注入和蠻力攻擊的MySQL。(159個字符)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。