MySql检测阻塞,锁等待sql
2017-08-14 15:00
211 查看
------------
1分钟内产生binlog大小计算
select@a1:=VARIABLE_VALUEasa1
frominformation_schema.GLOBAL_STATUS
whereVARIABLE_NAME='innodb_os_log_written'
unionall
selectsleep(60)
unionall
select@a2:=VARIABLE_VALUEasa2
frominformation_schema.GLOBAL_STATUS
whereVARIABLE_NAME='innodb_os_log_written';
selectround((@a2-@a1)/1024/1024/@@innodb_log_files_in_group)asMB;
---------------------
SELECT
p2.`HOST`Blockedhost,
p2.`USER`BlockedUser,
r.trx_idBlockedTrxId,
r.trx_mysql_thread_idBlockedThreadId,
TIMESTAMPDIFF(
SECOND,
r.trx_wait_started,
CURRENT_TIMESTAMP
)WaitTime,
r.trx_queryBlockedQuery,
l.lock_tableBlockedTable,
m.`lock_mode`BlockedLockMode,
m.`lock_type`BlockedLockType,
m.`lock_index`BlockedLockIndex,
m.`lock_space`BlockedLockSpace,
m.lock_pageBlockedLockPage,
m.lock_recBlockedLockRec,
m.lock_dataBlockedLockData,
p.`HOST`blocking_host,
p.`USER`blocking_user,
b.trx_idBlockingTrxid,
b.trx_mysql_thread_idBlockingThreadId,
b.trx_queryBlockingQuery,
l.`lock_mode`BlockingLockMode,
l.`lock_type`BlockingLockType,
l.`lock_index`BlockingLockIndex,
l.`lock_space`BlockingLockSpace,
l.lock_pageBlockingLockPage,
l.lock_recBlockingLockRec,
l.lock_dataBlockingLockData,
IF(p.COMMAND='Sleep',CONCAT(p.TIME,'seconds'),0)idel_in_trx
FROM
information_schema.INNODB_LOCK_WAITSw
INNERJOINinformation_schema.INNODB_TRXbONb.trx_id=w.blocking_trx_id
INNERJOINinformation_schema.INNODB_TRXrONr.trx_id=w.requesting_trx_id
INNERJOINinformation_schema.INNODB_LOCKSlONw.blocking_lock_id=l.lock_idANDl.`lock_trx_id`=b.`trx_id`
INNERJOINinformation_schema.INNODB_LOCKSmONm.`lock_id`=w.`requested_lock_id`ANDm.`lock_trx_id`=r.`trx_id`
INNERJOINinformation_schema.PROCESSLISTpONp.ID=b.trx_mysql_thread_id
INNERJOINinformation_schema.PROCESSLISTp2ONp2.ID=r.trx_mysql_thread_id
ORDERBY
WaitTimeDESC;
--------------
SELECT
p2.`HOST`被阻塞方host,
p2.`USER`被阻塞方用户,
r.trx_id被阻塞方事务id,
r.trx_mysql_thread_id被阻塞方线程号,
TIMESTAMPDIFF(
SECOND,
r.trx_wait_started,
CURRENT_TIMESTAMP
)等待时间,
r.trx_query被阻塞的查询,
l.lock_table阻塞方锁住的表,
m.`lock_mode`被阻塞方的锁模式,
m.`lock_type`"被阻塞方的锁类型(表锁还是行锁)",
m.`lock_index`被阻塞方锁住的索引,
m.`lock_space`被阻塞方锁对象的space_id,
m.lock_page被阻塞方事务锁定页的数量,
m.lock_rec被阻塞方事务锁定行的数量,
m.lock_data被阻塞方事务锁定记录的主键值,
p.`HOST`阻塞方主机,
p.`USER`阻塞方用户,
b.trx_id阻塞方事务id,
b.trx_mysql_thread_id阻塞方线程号,
b.trx_query阻塞方查询,
l.`lock_mode`阻塞方的锁模式,
l.`lock_type`"阻塞方的锁类型(表锁还是行锁)",
l.`lock_index`阻塞方锁住的索引,
l.`lock_space`阻塞方锁对象的space_id,
l.lock_page阻塞方事务锁定页的数量,
l.lock_rec阻塞方事务锁定行的数量,
l.lock_data阻塞方事务锁定记录的主键值,
IF(p.COMMAND='Sleep',CONCAT(p.TIME,'秒'),0)阻塞方事务空闲的时间
FROM
information_schema.INNODB_LOCK_WAITSw
INNERJOINinformation_schema.INNODB_TRXbONb.trx_id=w.blocking_trx_id
INNERJOINinformation_schema.INNODB_TRXrONr.trx_id=w.requesting_trx_id
INNERJOINinformation_schema.INNODB_LOCKSlONw.blocking_lock_id=l.lock_idANDl.`lock_trx_id`=b.`trx_id`
INNERJOINinformation_schema.INNODB_LOCKSmONm.`lock_id`=w.`requested_lock_id`ANDm.`lock_trx_id`=r.`trx_id`
INNERJOINinformation_schema.PROCESSLISTpONp.ID=b.trx_mysql_thread_id
INNERJOINinformation_schema.PROCESSLISTp2ONp2.ID=r.trx_mysql_thread_id
ORDERBY
等待时间DESC;
-------------------------------------------------------------------
#查找有碎片的表:
selecttable_schemadb,table_name,data_free,engine
frominformation_schema.tables
wheretable_schemanotin('information_schema','mysql')anddata_free>0;
SELECTTABLE_NAME,(DATA_LENGTH+INDEX_LENGTH)/1024/1024size_mb,data_free/1024/1024free_mb,TABLE_ROWS
FROMinformation_schema.tableswheretable_schemanotin('information_schema','mysql')
anddata_free/1024/1024>=1orderbyfree_mbdesc;
---------------------------------------------------------------------------
#找出没有主键的表
Selectt.table_schema,t.table_name,t.engine,t.table_rows
Frominformation_schema.tablesast
Leftjoininformation_schema.table_constraintsastc
Ontc.table_schema=t.table_schema
Andtc.table_name=t.table_name
Andtc.constraint_type='PRIMARYKEY'
Wheret.table_type='BASETABLE'
Andtc.constraint_typeisnull
Andt.table_schemanotin('mysql','performance_schema','information_schema');
------------------------------
查看事务等待状况:
select
r.trx_idwaiting_trx_id,
r.trx_mysql_thread_idwaiting_thread,
r.trx_querywaiting_query,
b.trx_idblocking_trx_id,
b.trx_mysql_thread_idblocking_thread,
b.trx_queryblocking_query
from
information_schema.innodb_lock_waitsw
innerjoininformation_schema.innodb_trxbonb.trx_id=w.blocking_trx_id
innerjoininformation_schema.innodb_trxronr.trx_id=w.requesting_trx_id;
查看更具体的事务等待状况:
select
b.trx_state,
e.state,
e.time,
d.stateasblock_state,
d.timeasblock_time,
a.requesting_trx_id,
a.requested_lock_id,
b.trx_query,
b.trx_mysql_thread_id,
a.blocking_trx_id,
a.blocking_lock_id,
c.trx_queryasblock_trx_query,
c.trx_mysql_thread_idasblock_trx_mysql_tread_id
from
information_schema.innodb_lock_waitsa
leftjoininformation_schema.innodb_trxbona.requesting_trx_id=b.trx_id
leftjoininformation_schema.innodb_trxcona.blocking_trx_id=c.trx_id
leftjoininformation_schema.processlistdonc.trx_mysql_thread_id=d.id
leftjoininformation_schema.processlisteonb.trx_mysql_thread_id=e.id
orderby
a.requesting_trx_id;
查看未关闭的事务:
–mysql5.6
select
a.trx_id,
a.trx_state,
a.trx_started,
a.trx_query,
b.id,
b.user,
b.db,
b.command,
b.time,
b.state,
b.info,
c.processlist_user,
c.processlist_host,
c.processlist_db,
d.sql_text
from
information_schema.innodb_trxa
leftjoininformation_schema.processlistbona.trx_mysql_thread_id=b.id
andb.command='sleep'
leftjoinperformance_schema.threadsconb.id=c.processlist_id
leftjoinperformance_schema.events_statements_currentdond.thread_id=c.thread_id;
–mysql5.5
select
a.trx_id,
a.trx_state,
a.trx_started,
a.trx_query,
b.id,
b.user,
b.host,
b.db,
b.command,
b.time,
b.state,
b.info
from
information_schema.innodb_trxa
leftjoininformation_schema.processlistbona.trx_mysql_thread_id=b.id
where
b.command='sleep';
查看某段时间以来未关闭事务:
select
trx_id,
trx_started,
trx_mysql_thread_id
from
information_schema.innodb_trx
where
trx_started<date_sub(now(),interval1minute)
andtrx_operation_stateisnull
andtrx_queryisnull;
1分钟内产生binlog大小计算
select@a1:=VARIABLE_VALUEasa1
frominformation_schema.GLOBAL_STATUS
whereVARIABLE_NAME='innodb_os_log_written'
unionall
selectsleep(60)
unionall
select@a2:=VARIABLE_VALUEasa2
frominformation_schema.GLOBAL_STATUS
whereVARIABLE_NAME='innodb_os_log_written';
selectround((@a2-@a1)/1024/1024/@@innodb_log_files_in_group)asMB;
---------------------
SELECT
p2.`HOST`Blockedhost,
p2.`USER`BlockedUser,
r.trx_idBlockedTrxId,
r.trx_mysql_thread_idBlockedThreadId,
TIMESTAMPDIFF(
SECOND,
r.trx_wait_started,
CURRENT_TIMESTAMP
)WaitTime,
r.trx_queryBlockedQuery,
l.lock_tableBlockedTable,
m.`lock_mode`BlockedLockMode,
m.`lock_type`BlockedLockType,
m.`lock_index`BlockedLockIndex,
m.`lock_space`BlockedLockSpace,
m.lock_pageBlockedLockPage,
m.lock_recBlockedLockRec,
m.lock_dataBlockedLockData,
p.`HOST`blocking_host,
p.`USER`blocking_user,
b.trx_idBlockingTrxid,
b.trx_mysql_thread_idBlockingThreadId,
b.trx_queryBlockingQuery,
l.`lock_mode`BlockingLockMode,
l.`lock_type`BlockingLockType,
l.`lock_index`BlockingLockIndex,
l.`lock_space`BlockingLockSpace,
l.lock_pageBlockingLockPage,
l.lock_recBlockingLockRec,
l.lock_dataBlockingLockData,
IF(p.COMMAND='Sleep',CONCAT(p.TIME,'seconds'),0)idel_in_trx
FROM
information_schema.INNODB_LOCK_WAITSw
INNERJOINinformation_schema.INNODB_TRXbONb.trx_id=w.blocking_trx_id
INNERJOINinformation_schema.INNODB_TRXrONr.trx_id=w.requesting_trx_id
INNERJOINinformation_schema.INNODB_LOCKSlONw.blocking_lock_id=l.lock_idANDl.`lock_trx_id`=b.`trx_id`
INNERJOINinformation_schema.INNODB_LOCKSmONm.`lock_id`=w.`requested_lock_id`ANDm.`lock_trx_id`=r.`trx_id`
INNERJOINinformation_schema.PROCESSLISTpONp.ID=b.trx_mysql_thread_id
INNERJOINinformation_schema.PROCESSLISTp2ONp2.ID=r.trx_mysql_thread_id
ORDERBY
WaitTimeDESC;
--------------
SELECT
p2.`HOST`被阻塞方host,
p2.`USER`被阻塞方用户,
r.trx_id被阻塞方事务id,
r.trx_mysql_thread_id被阻塞方线程号,
TIMESTAMPDIFF(
SECOND,
r.trx_wait_started,
CURRENT_TIMESTAMP
)等待时间,
r.trx_query被阻塞的查询,
l.lock_table阻塞方锁住的表,
m.`lock_mode`被阻塞方的锁模式,
m.`lock_type`"被阻塞方的锁类型(表锁还是行锁)",
m.`lock_index`被阻塞方锁住的索引,
m.`lock_space`被阻塞方锁对象的space_id,
m.lock_page被阻塞方事务锁定页的数量,
m.lock_rec被阻塞方事务锁定行的数量,
m.lock_data被阻塞方事务锁定记录的主键值,
p.`HOST`阻塞方主机,
p.`USER`阻塞方用户,
b.trx_id阻塞方事务id,
b.trx_mysql_thread_id阻塞方线程号,
b.trx_query阻塞方查询,
l.`lock_mode`阻塞方的锁模式,
l.`lock_type`"阻塞方的锁类型(表锁还是行锁)",
l.`lock_index`阻塞方锁住的索引,
l.`lock_space`阻塞方锁对象的space_id,
l.lock_page阻塞方事务锁定页的数量,
l.lock_rec阻塞方事务锁定行的数量,
l.lock_data阻塞方事务锁定记录的主键值,
IF(p.COMMAND='Sleep',CONCAT(p.TIME,'秒'),0)阻塞方事务空闲的时间
FROM
information_schema.INNODB_LOCK_WAITSw
INNERJOINinformation_schema.INNODB_TRXbONb.trx_id=w.blocking_trx_id
INNERJOINinformation_schema.INNODB_TRXrONr.trx_id=w.requesting_trx_id
INNERJOINinformation_schema.INNODB_LOCKSlONw.blocking_lock_id=l.lock_idANDl.`lock_trx_id`=b.`trx_id`
INNERJOINinformation_schema.INNODB_LOCKSmONm.`lock_id`=w.`requested_lock_id`ANDm.`lock_trx_id`=r.`trx_id`
INNERJOINinformation_schema.PROCESSLISTpONp.ID=b.trx_mysql_thread_id
INNERJOINinformation_schema.PROCESSLISTp2ONp2.ID=r.trx_mysql_thread_id
ORDERBY
等待时间DESC;
-------------------------------------------------------------------
#查找有碎片的表:
selecttable_schemadb,table_name,data_free,engine
frominformation_schema.tables
wheretable_schemanotin('information_schema','mysql')anddata_free>0;
SELECTTABLE_NAME,(DATA_LENGTH+INDEX_LENGTH)/1024/1024size_mb,data_free/1024/1024free_mb,TABLE_ROWS
FROMinformation_schema.tableswheretable_schemanotin('information_schema','mysql')
anddata_free/1024/1024>=1orderbyfree_mbdesc;
---------------------------------------------------------------------------
#找出没有主键的表
Selectt.table_schema,t.table_name,t.engine,t.table_rows
Frominformation_schema.tablesast
Leftjoininformation_schema.table_constraintsastc
Ontc.table_schema=t.table_schema
Andtc.table_name=t.table_name
Andtc.constraint_type='PRIMARYKEY'
Wheret.table_type='BASETABLE'
Andtc.constraint_typeisnull
Andt.table_schemanotin('mysql','performance_schema','information_schema');
------------------------------
ySQL中一些查看事务和锁情况的常用语句
一些查看数据库中事务和锁情况的常用语句查看事务等待状况:
select
r.trx_idwaiting_trx_id,
r.trx_mysql_thread_idwaiting_thread,
r.trx_querywaiting_query,
b.trx_idblocking_trx_id,
b.trx_mysql_thread_idblocking_thread,
b.trx_queryblocking_query
from
information_schema.innodb_lock_waitsw
innerjoininformation_schema.innodb_trxbonb.trx_id=w.blocking_trx_id
innerjoininformation_schema.innodb_trxronr.trx_id=w.requesting_trx_id;
查看更具体的事务等待状况:
select
b.trx_state,
e.state,
e.time,
d.stateasblock_state,
d.timeasblock_time,
a.requesting_trx_id,
a.requested_lock_id,
b.trx_query,
b.trx_mysql_thread_id,
a.blocking_trx_id,
a.blocking_lock_id,
c.trx_queryasblock_trx_query,
c.trx_mysql_thread_idasblock_trx_mysql_tread_id
from
information_schema.innodb_lock_waitsa
leftjoininformation_schema.innodb_trxbona.requesting_trx_id=b.trx_id
leftjoininformation_schema.innodb_trxcona.blocking_trx_id=c.trx_id
leftjoininformation_schema.processlistdonc.trx_mysql_thread_id=d.id
leftjoininformation_schema.processlisteonb.trx_mysql_thread_id=e.id
orderby
a.requesting_trx_id;
查看未关闭的事务:
–mysql5.6
select
a.trx_id,
a.trx_state,
a.trx_started,
a.trx_query,
b.id,
b.user,
b.db,
b.command,
b.time,
b.state,
b.info,
c.processlist_user,
c.processlist_host,
c.processlist_db,
d.sql_text
from
information_schema.innodb_trxa
leftjoininformation_schema.processlistbona.trx_mysql_thread_id=b.id
andb.command='sleep'
leftjoinperformance_schema.threadsconb.id=c.processlist_id
leftjoinperformance_schema.events_statements_currentdond.thread_id=c.thread_id;
–mysql5.5
select
a.trx_id,
a.trx_state,
a.trx_started,
a.trx_query,
b.id,
b.user,
b.host,
b.db,
b.command,
b.time,
b.state,
b.info
from
information_schema.innodb_trxa
leftjoininformation_schema.processlistbona.trx_mysql_thread_id=b.id
where
b.command='sleep';
查看某段时间以来未关闭事务:
select
trx_id,
trx_started,
trx_mysql_thread_id
from
information_schema.innodb_trx
where
trx_started<date_sub(now(),interval1minute)
andtrx_operation_stateisnull
andtrx_queryisnull;
相关文章推荐
- MySql检测阻塞,锁等待sql
- MySql检测阻塞,锁等待sql
- MySQL中捕获低效SQL语句的配置以及检测SQL语句效率的方法
- MySQL Innodb如何找出阻塞事务源头SQL
- mysql 查询正在执行的事务以及等待锁 常用的sql语句
- 检测mysql中sql语句的效率
- 通过分析mysql日志检测sql注入
- 通过分析mysql日志检测sql注入
- MySQL Innodb 如何找出阻塞事务源头 SQL
- MySql 防注入及SQL语句安全检测
- 如何检测mysql 数据库执行了哪些sql语句 ecshop如何添加商品属性 ecshop 商品属性批量采集入库
- sql执行效率检测 mysql explain
- 系统隐形杀手――阻塞与等待(SQL)
- 2012 使用XEvent sqlserver.blocked_process_report检测阻塞
- 【MySQL优化】——慢查询sql的检测与记录
- MySQL 检测sql语句性能
- mysql 查询正在执行的事务以及等待锁 常用的sql语句
- 检测mysql中sql语句的效率的方法
- 检测数据库各实例session 阻塞 tree的sql
- sql执行效率检测 mysql explain