select version();+------------+| version() |+----------" />

<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        初步認知MySQLmetadatalock(MDL)_MySQL

        來源:懂視網 責編:小采 時間:2020-11-09 18:50:41
        文檔

        初步認知MySQLmetadatalock(MDL)_MySQL

        初步認知MySQLmetadatalock(MDL)_MySQL:bitsCN.com 概述MDL意味著DDL,一旦DDL被阻塞,那么面向該表的所有Query都會被掛起,包括Select,不過5.6作了改進,5.5可通過參數控制假如沒有MDL會話1:mysql> select version();+------------+| version() |+----------
        推薦度:
        導讀初步認知MySQLmetadatalock(MDL)_MySQL:bitsCN.com 概述MDL意味著DDL,一旦DDL被阻塞,那么面向該表的所有Query都會被掛起,包括Select,不過5.6作了改進,5.5可通過參數控制假如沒有MDL會話1:mysql> select version();+------------+| version() |+----------

        bitsCN.com 概述

        MDL意味著DDL,一旦DDL被阻塞,那么面向該表的所有Query都會被掛起,包括Select,不過5.6作了改進,5.5可通過參數控制

        假如沒有MDL

        會話1:mysql> select version();+------------+| version() |+------------+| 5.1.72-log |+------------+1 row in set (0.00 sec)mysql> select @@tx_isolation;+-----------------+| @@tx_isolation |+-----------------+| REPEATABLE-READ |+-----------------+1 row in set (0.00 sec)mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from t where id=1;+----+--------+| id | name |+----+--------+| 1 | python |+----+--------+1 row in set (0.04 sec)會話2:mysql> alter table t add column comment varchar(200) default 'I use Python';Query OK, 3 rows affected (0.02 sec)Records: 3 Duplicates: 0 Warnings: 0會話1:mysql> select * from t where id=1;Empty set (0.00 sec)mysql> rollback;Query OK, 0 rows affected (0.00 sec)mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from t where id=1;+----+--------+--------------+| id | name | comment |+----+--------+--------------+| 1 | python | I use Python |+----+--------+--------------+1 row in set (0.00 sec)

        與上面的不同,在5.5 MDL拉長了生命長度,與事務同生共死,只要事務還在,MDL就在,由于事務持有MDL鎖,任何DDL在事務期間都休息染指,下面是個例子

        會話1:mysql> select version();+------------+| version() |+------------+| 5.5.16-log |+------------+1 row in set (0.01 sec)mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from t order by id;+----+------+| id | name |+----+------+| 1 | a || 2 | e || 3 | c |+----+------+3 rows in set (0.00 sec)會話2:mysql> alter table t add column cc char(10) default 'c lang'; <<===Hangs會話3:mysql> show processlist;+----+------+-----------+------+---------+------+---------------------------------+-------------------------------------------------------+| Id | User | Host | db | Command | Time | State | Info |+----+------+-----------+------+---------+------+---------------------------------+-------------------------------------------------------+| 2 | root | localhost | db1 | Sleep | 191 | | NULL || 3 | root | localhost | db1 | Query | 125 | Waiting for table metadata lock | alter table t add column cc char(10) default 'c lang' || 4 | root | localhost | NULL | Query | 0 | NULL | show processlist |+----+------+-----------+------+---------+------+---------------------------------+-------------------------------------------------------+
        mysql> show profiles;+----------+---------------+-------------------------------------------------------+| Query_ID | Duration | Query |+----------+---------------+-------------------------------------------------------+| 1 | 1263.64100500 | alter table t add column dd char(10) default ' Elang' |+----------+---------------+-------------------------------------------------------+1 row in set (0.00 sec)mysql> show profile for query 1;+------------------------------+------------+| Status | Duration |+------------------------------+------------+| starting | 0.000124 || checking permissions | 0.000015 || checking permissions | 0.000010 || init | 0.000023 || Opening tables | 0.000063 || System lock | 0.000068 || setup | 0.000082 || creating table | 0.034159 || After create | 0.000185 || copy to tmp table | 0.000309 || rename result table | 999.999999 || end | 0.004457 || Waiting for query cache lock | 0.000024 || end | 0.000029 || query end | 0.000009 || closing tables | 0.000030 || freeing items | 0.000518 || cleaning up | 0.000015 |+------------------------------+------------+18 rows in set (0.00 sec)

        案例

        監控

        lock_wait_timeout

        mysql> show variables like 'lock_wait_timeout';+-------------------+----------+| Variable_name | Value |+-------------------+----------+| lock_wait_timeout | 31536000 |+-------------------+----------+1 row in set (0.00 sec)
        This variable specifies the timeout in seconds for attempts to acquire metadata locks. The permissible values range from 1 to 31536000 (1 year). The default is 31536000

        診斷

        Connection #1:create table t1 (id int) engine=myisam;set @@autocommit=0;select * from t1;Connection #2:alter table t1 rename to t2; <-- Hangs 

        對于InnoDB表:

        create table t3 (id int) engine=innodb;create table t4 (id int) engine=innodb;delimiter |CREATE TRIGGER t3_trigger AFTER INSERT ON t3 FOR EACH ROW BEGIN INSERT INTO t4 SET id = NEW.id; END;|delimiter ;
        Connection #1:begin;insert into t3 values (1);
        Connection #2:drop trigger if exists t3_trigger; <-- Hangsmysql> SHOW ENGINE INNODB STATUS/G;............------------TRANSACTIONS------------Trx id counter BF03Purge done for trx's n:o < BD03 undo n:o < 0History list length 82LIST OF TRANSACTIONS FOR EACH SESSION:---TRANSACTION 0, not startedMySQL thread id 4, OS thread handle 0xa7d3fb90, query id 40 localhost rootshow engine innodb status---TRANSACTION BF02, ACTIVE 38 sec2 lock struct(s), heap size 320, 0 row lock(s), undo log entries 2MySQL thread id 2, OS thread handle 0xa7da1b90, query id 37 localhost root.........
        TRANSACTIONSIf this section reports lock waits, your applications might have lock contention. The output can also help to trace the reasons for transaction deadlocks.
        SELECT * FROM INNODB_LOCK_WAITS
        SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS)
        SELECT INNODB_LOCKS.* FROM INNODB_LOCKS JOIN INNODB_LOCK_WAITS ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID)
        SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name
        SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT'

        與table cache的關系

        會話1:mysql> show status like 'Open%tables';+---------------+-------+| Variable_name | Value |+---------------+-------+| Open_tables | 26 | <==當前打開的表數量| Opened_tables | 2 | <==已經打開的表數量+---------------+-------+2 rows in set (0.00 sec)會話2:mysql> alter table t add column Oxx char(20) default 'ORACLE';Query OK, 3 rows affected (0.05 sec)Records: 3 Duplicates: 0 Warnings: 0會話1:mysql> select * from t order by id;+----+------+--------+--------+---------+---------+-------+--------+--------+--------+--------+| id | name | cc | dd | EE | ff | OO | OE | OF | OX | Oxx |+----+------+--------+--------+---------+---------+-------+--------+--------+--------+--------+| 1 | a | c lang | Elang | Golang | Golang | MySQL | ORACLE | ORACLE | ORACLE | ORACLE || 2 | e | c lang | Elang | Golang | Golang | MySQL | ORACLE | ORACLE | ORACLE | ORACLE || 3 | c | c lang | Elang | Golang | Golang | MySQL | ORACLE | ORACLE | ORACLE | ORACLE |+----+------+--------+--------+---------+---------+-------+--------+--------+--------+--------+3 rows in set (0.00 sec)mysql> show status like 'Open%tables';+---------------+-------+| Variable_name | Value |+---------------+-------+| Open_tables | 27 || Opened_tables | 3 |+---------------+-------+2 rows in set (0.00 sec)會話2:mysql> alter table t add column Oxf char(20) default 'ORACLE';Query OK, 3 rows affected (0.06 sec)Records: 3 Duplicates: 0 Warnings: 0會話1:mysql> show status like 'Open%tables';+---------------+-------+| Variable_name | Value |+---------------+-------+| Open_tables | 26 || Opened_tables | 3 |+---------------+-------+2 rows in set (0.00 sec) 

        結論:

        當需要對"熱表"做DDL,需要特別謹慎,否則,容易造成MDL等待,導致連接耗盡或者拖垮Server

        bitsCN.com

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        初步認知MySQLmetadatalock(MDL)_MySQL

        初步認知MySQLmetadatalock(MDL)_MySQL:bitsCN.com 概述MDL意味著DDL,一旦DDL被阻塞,那么面向該表的所有Query都會被掛起,包括Select,不過5.6作了改進,5.5可通過參數控制假如沒有MDL會話1:mysql> select version();+------------+| version() |+----------
        推薦度:
        標簽: mysql lock) metadata
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 最新久久免费视频| 91av免费在线视频| 最近2019中文字幕免费大全5| 亚洲综合av永久无码精品一区二区 | 中文字幕永久免费视频| 中文亚洲成a人片在线观看| 国产三级在线免费观看| 亚洲精品你懂的在线观看| 久久大香香蕉国产免费网站 | 亚洲成人网在线观看| 最近中文字幕大全中文字幕免费| 久久丫精品国产亚洲av不卡| 69pao强力打造免费高清| 亚洲人成网站看在线播放| 国拍在线精品视频免费观看 | 免费人成在线观看网站品爱网| 亚洲黄色中文字幕| 在人线av无码免费高潮喷水| 亚洲熟伦熟女专区hd高清| 免费女人18毛片a级毛片视频| 国产精品99爱免费视频| 久久精品亚洲精品国产色婷| 国产桃色在线成免费视频| 羞羞视频免费网站含羞草| 亚洲精品蜜桃久久久久久| 国产精彩免费视频| 粉色视频免费入口| 亚洲精品国产成人片| 成人免费一区二区无码视频| 九九免费久久这里有精品23 | 亚洲熟伦熟女专区hd高清| 国内精品99亚洲免费高清| 99在线在线视频免费视频观看| 亚洲日本乱码卡2卡3卡新区| yy6080久久亚洲精品| 91精品全国免费观看含羞草| 亚洲AV永久无码精品网站在线观看| 亚洲精品无码不卡在线播HE| 免费成人福利视频| 一级毛片免费观看不收费| 亚洲成a人片在线观看播放|