zoukankan      html  css  js  c++  java
  • MySQL Transaction--事务相关查询

    MySQL支持的四种事务隔离级别

    READ-UNCOMMITTED
    READ-COMMITTED
    REPEATABLE-READ
    SERIALIZABLE

    查看全局事务隔离级别和会话事务隔离级别

    SHOW GLOBAL VARIABLES LIKE 'tx_isolation';
    SHOW SESSION VARIABLES LIKE 'tx_isolation';
    SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation; 

    修改事务隔离级别参数

    SET GLOBAL tx_isolation='REPEATABLE-READ'; 
    SET GLOBAL transaction_isolation='REPEATABLE-READ';
    SET SESSION tx_isolation='SERIALIZABLE';
    SET GLOBAL transaction_isolation='REPEATABLE-READ';

    tx_isolation和transaction_isolation两者等价相同,修改任意一个即可。

    修改已开启事务的隔离级别

    在事务中修改事务隔离级别,需要使用使用SET TRANSACTION ISOLATION LEVEL 命令来修改事务隔离级别。

    语法格式为:

    SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

    主要修改时必须使用SESSION或GLOBAL进行修饰,SET TRANSACTION without GLOBAL or SESSION is not permitted while there is an active transaction,否者会报“ERROR 1568 (25001): Transaction characteristics can't be changed while a transaction is in progress”

    修改Demo

    START TRANSACTION;
    SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

    查看事务锁持有的锁

    SELECT  
    r.trx_id waiting_trx_id ,
    r.trx_query waiting_query ,
    b.trx_id blocking_trx_id ,
    b.trx_query blocking_query ,
    b.trx_mysql_thread_id blocking_thread ,
    b.trx_started ,
    b.trx_wait_started
    FROM information_schema.innodb_lock_waits w
    INNER JOIN information_schema.innodb_trx b
    ON b.trx_id = w.blocking_trx_id
    INNER JOIN information_schema.innodb_trx r
    ON r.trx_id = w.requesting_trx_id 

    查看当前事务使用的事务隔离级别

    SELECT 
    p.ID,
    P.USER,
    P.HOST,
    p.DB,
    P.TIME,
    T.trx_started,
    T.trx_isolation_level,
    T.trx_tables_locked,
    T.trx_rows_locked,
    t.trx_state,
    p.COMMAND AS process_state
    FROM `information_schema`.`INNODB_TRX` t
    INNER JOIN `information_schema`.`PROCESSLIST` p
    ON t.trx_mysql_thread_id=p.id;

    查看未提交事务

    ## 查看未提交的事务 ##
    SELECT 
    p.ID,
    P.USER,
    P.HOST,
    p.DB,
    P.TIME,
    T.trx_started,
    T.trx_isolation_level,
    T.trx_tables_locked,
    T.trx_rows_locked,
    t.trx_state,
    p.COMMAND AS process_state
    FROM `information_schema`.`INNODB_TRX` t
    INNER JOIN `information_schema`.`PROCESSLIST` p
    ON t.trx_mysql_thread_id=p.id
    WHERE t.trx_state='RUNNING'
    AND p.COMMAND='Sleep' 
    ORDER BY T.trx_started ASC G

    查看阻塞事务

    ##查看阻塞事务##
    SELECT
    P2.`ID` BlockProcessID,
    p2.`HOST` Blockedhost,  
    p2.`USER` BlockedUser,  
    r.trx_id BlockedTrxId,      
    r.trx_mysql_thread_id BlockedThreadId,      
    TIMESTAMPDIFF(      
    SECOND,      
    r.trx_wait_started,      
    CURRENT_TIMESTAMP      
    ) WaitTime,      
    r.trx_query BlockedQuery,      
    l.lock_table BlockedTable,    
    m.`lock_mode` BlockedLockMode,  
    m.`lock_type` BlockedLockType,  
    m.`lock_index` BlockedLockIndex,  
    m.`lock_space` BlockedLockSpace,  
    m.lock_page BlockedLockPage,  
    m.lock_rec BlockedLockRec,  
    m.lock_data BlockedLockData,
    p.`ID` BlockingProcessID,  
    p.`HOST` blocking_host,   
    p.`USER` blocking_user,  
    b.trx_id BlockingTrxid,      
    b.trx_mysql_thread_id BlockingThreadId,  
    b.trx_query BlockingQuery,  
    l.`lock_mode` BlockingLockMode,  
    l.`lock_type` BlockingLockType,  
    l.`lock_index` BlockingLockIndex,  
    l.`lock_space` BlockingLockSpace,  
    l.lock_page BlockingLockPage,  
    l.lock_rec BlockingLockRec,  
    l.lock_data BlockingLockData,           
    IF (p.COMMAND = 'Sleep', CONCAT(p.TIME,' seconds'), 0) idel_in_trx               
    FROM information_schema.INNODB_LOCK_WAITS w      
    INNER JOIN information_schema.INNODB_TRX b 
    ON b.trx_id = w.blocking_trx_id      
    INNER JOIN information_schema.INNODB_TRX r 
    ON r.trx_id = w.requesting_trx_id      
    INNER JOIN information_schema.INNODB_LOCKS l 
    ON w.blocking_lock_id = l.lock_id  
    AND l.`lock_trx_id`=b.`trx_id`  
    INNER JOIN information_schema.INNODB_LOCKS m 
    ON m.`lock_id`=w.`requested_lock_id` 
    AND m.`lock_trx_id`=r.`trx_id`  
    INNER JOIN information_schema.PROCESSLIST p 
    ON p.ID = b.trx_mysql_thread_id     
    INNER JOIN information_schema.PROCESSLIST p2 
    ON p2.ID = r.trx_mysql_thread_id   
    ORDER BY WaitTime DESC ;
  • 相关阅读:
    caffe常用层: batchNorm层和scale层
    简述configure、pkg-config、pkg_config_path三者的关系
    python删除list中元素的三种方法
    Leetcode 872. Leaf-Similar Trees
    Leetcode 508. Most Frequent Subtree Sum
    Leetcode 572. Subtree of Another Tree
    Leetcode 894. All Possible Full Binary Trees
    Leetcode 814. Binary Tree Pruning
    Leetcode 557. Reverse Words in a String III
    python 多维list声明时的小问题
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10643084.html
Copyright © 2011-2022 走看看