zoukankan      html  css  js  c++  java
  • 8.11.2 Table Locking Issues 表锁执行

    8.11.2 Table Locking Issues 表锁执行

    InnoDB 表使用行级锁,多个会话和应用可以读和写相同的表,不让对方等待或者产生一个不一致的结果。

    对于这种存储引擎,避免使用LOCK TABLES语句,因为它不提供任何额外的保护,

    但是降低并发。自动的行锁让这些表适合你最繁忙的数据库,同时也简化了应用程序的逻辑,因为你不需要lock和unlock

    表。因此,InnoDB存储引擎是MySQL 5.6的默认.

    MySQL 使用表锁(而不是page, row, or column locking) 对于所有的存储引擎除了InnoDB,

    lock 操作本身没有太大的开销,但是因为只有一个会话可以写表在同一时间.

    性能考虑支持InnoDB

    当选择是否创建一个表使用InnoDB 或者不同的存储引擎,你记住以下表锁定的缺点:

    表锁定 让很多的会话在同一时间读取一个表,但是一个会话需要写一个表,

    它必须得到一个独占访问,意味着 你可能需要等待其他会话先完成表

    在更新期间, 其他的会话需要访问特定的表必须等待更新完成

    表锁定 导致当一个会话等待因为磁盘满了没有可用空间在会话可以处理前,所有的会话需要访问有问题的表

    直到有更多的空间。

    一个SELECT 语句需要很长时间运行防止其他会话 更新表,让其他会话变的很慢或者反应迟钝。

    当一个会话等待获得独占的访问表用于更新, 其他会话执行SELECT 语句会排在它后面,

    降低并发即使是只读会话。

    锁定性能问题的解决方法

    下面的内容描述一些方法来避免或者降低并发导致的问题:

    1.考虑切换表到InnoDB存储引擎, 或者使用CREAE TABLE .. ENGINE=INNODB during setup, 或者使用

    ALTER TABLE … ENGINE=INNODB for an existing table. See Chapter 14, The InnoDB Storage Engine for more details

    about this storage engine.

    2.优化SELECT 语句来运行更快 ,因此它们锁定表 更短的时间,你可能需要创建一些汇总表

    3.启动mysqld with –low-priority-updates. 对于存储引擎只使用 table-level locking (such as MyISAM, MEMORY, and

    MERGE),

    给所有的语句,update 一个表 很低的优先级相比SELECT 语句。

  • 相关阅读:
    visual studio 2010 ***.vshost.exe 应用程序错误
    SQL Server ID自增列(转)
    Windows Boot Manager (Bootmgr.exe)(转)
    窗口函数(转)
    ubuntu下iso做更新源(转)
    由windows引导ubuntu
    VS2010数据库项目不能正常工作解决方案(转)
    QTP中对EXCEL进行读操作的格式
    VBS中ArrayList的用法
    VBS中dictionary的用法
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351242.html
Copyright © 2011-2022 走看看