生产服务器环境中Table_locks_immediate值非常高,达到60多万了,但Table_locks_waited只有100多。

解决方案 »

  1.   

    Table_locks_immediate表示立即释放表锁数,Table_locks_waited表示需要等待的表锁数,
    如果Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎,
    因为InnoDB是行锁而MyISAM是表锁,对于高并发写入的应用InnoDB效果会好些。
    示例中的服务器Table_locks_immediate / Table_locks_waited = 235,MyISAM就足够了。
      

  2.   

    如果Table_locks_waited的值比较高,则说明存在着较严重的表级锁争用情况。
    你的情况很不错
      

  3.   

    我们用状态变量 Table_locks_waited 和 Table_locks_immediate 来分析系统中的锁表争夺情况
    看的方法看1L 2L
      

  4.   

    不要从网上抄啊,你不觉得,按照如果Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎,我现在服务器的情况非常糟糕?或许是不是该改为Table_locks_immediate / Table_locks_waited < 5000?我疑惑的是这里!!
      

  5.   

    sorry 
    我仔细看了 是有问题。。我觉得这个值应该越小越好 。。
    只要够小 使用Myisam引擎就够了。。Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎 
    这句话我也认为是错误的
      

  6.   

    所以你的服务器表锁的情况应该算不错的。。等待的锁不多,不需要使用InnoDb
      

  7.   

    如果一个表,update、select都比较频繁,有什么办法来减少表锁?主从同步/读写分离?分离后,“写入服务器”上读减少了,但“读取服务器”上的写似乎不会减少吧?“写入服务器”上的binlog在“读取服务器”上应用时不会存在表锁吗?分区表?没找到相关资料说,什么样的情形下,所只加在特定分区上,而不是整个表上面,所以也不确定这个方法是否有效。thank you!
      

  8.   

    •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     |
    +-----------------------+---------+
      

  9.   

    如果一个表,update、select都比较频繁,有什么办法来减少表锁?主从同步/读写分离?分离后,“写入服务器”上读减少了,但“读取服务器”上的写似乎不会减少吧?“写入服务器”上的binlog在“读取服务器”上应用时不会存在表锁吗?分区表?没找到相关资料说,什么样的情形下,所只加在特定分区上,而不是整个表上面,所以也不确定这个方法是否有效。