zoukankan      html  css  js  c++  java
  • 8.5.2 Optimizing InnoDB Transaction Management

    8.5.2 Optimizing InnoDB Transaction Management

    优化InnoDB 事务处理,找到理想的平衡在性能负载和你的服务器的负载。

    比如,一个应用可能遇到性能问题如果它每秒提交了数千次,和不同的性能问题如果它每2-3个小时提交。

    默认的MySQL 设置为AUTOCOMMIT=1 ,可以强加性能限制在一个繁忙的数据库上.

    在实践中,把几个相关的DML操作到一个单独的事务,通过执行SET AUTOCOMMIT=0

    或者START TRANSACTION 豫剧, 跟着一个COMMIT 语句在做所有的改变后。

    InnoDB 必须 flush 日志到磁盘在每次事务提交,如果事务修改了数据库。

    当每个改变后面跟着一个commit(如默认的autoCommit设置),存储设备的I/O 吞吐量。

    另外, 对于交易只有一个单独的SELECT 语句, 打开AUTOCOMMIT 帮助InnoDB 来重新组织read-only 事务

    和 优化它们。See Section 8.5.3, “Optimizing InnoDB Read-Only Transactions” for requirements.

    避免性能回滚在每次inserting, updating, or deleting大量记录。

    如果一个大事务是弄慢了server性能, 回滚会造成更严重的问题,

    可能几倍于原始的DML操作。 kill数据库进程没有帮助, 因为回滚在数据库启动时又运行

    尽量减少这个问题发生的几率:

    增加 buffer pool 的大小,可以让所有的DML 操作可以被cached 相比立即写入到磁盘。

    Set innodb_change_buffering=all 所有的更新和删除操作是被缓存除了INSERT操作

    考虑执行COMMIT 语句定期的在大的DML操作

    一旦失控的回滚操作发生,增加buffer pool,rollback 变的CPU-bound和运行的很快,

    或者kill server 和重启带innodb_force_recovery=3,as explained in Section 14.15.1, “The InnoDB Recovery Process”

    .

    这个问题在在MySQL 5.5和更高的版本变的不重要,因为默认的设置innodb_change_buffering=all

    允许耿勋和删除操作 被cache在内存里,让它们快速执行在第一个地方,

    如果需要 也可以快速回滚。确保使用这个参数设置在每个服务器上,处理长的事务有很多的插入,更新和删除

    如果你能承受 最后提交的一些事务的丢失如果一个crash 发生,

    你可以设置innodb_flush_log_at_trx_commit parameter to 0,默认为1
    mysql> show variables like ‘%innodb_flush_log_at_trx_commit%’;
    +——————————–+——-+
    | Variable_name | Value |
    +——————————–+——-+
    | innodb_flush_log_at_trx_commit | 1 |
    +——————————–+——-+
    1 row in set (0.00 sec)

    InnoDB 尝试每秒flush 日志,尽管flush不是强制的。

    设置innodb_support_xa to 0,会降低磁盘flush的次数 由于同步磁盘和binary log.

    当修改或者删除记录,记录和相关的undo logs 不是立即物理删除的,

    或者甚至在事务提交后。 undo里老的数据是被保留的直到事务很早开始的或者并发结束的,

    因此那些事务可以访问先前的状态或者修改或者删除的记录。

    因此,长时间运行的事务可以防止InnoDB 清理数据,被不同会话修改

    当记录被修改或者删除在一个长时间运行的事务里, 其他的会话使用

    READ COMMITTED and REPEATABLE READ 隔离级别需要做更多的工作来重建老的数据 如果它们读取相同的记录。

    当一个长时间运行的事务修改一个表,查询针对的表从其他会话不使用覆盖索引技术。

    查询通常检索所有的数据从一个 secondary index, 代替的是寻找相应的值从表数据。

  • 相关阅读:
    iOS开发UI篇—Modal简单介绍
    iOS开发UI篇—APP主流UI框架结构
    A1081. Rational Sum
    A1049. Counting Ones
    A1008. Elevator
    A1104. Sum of Number Segments
    B1003. 我要通过!
    二分查找、two points、排序
    A1069. The Black Hole of Numbers
    A1101. Quick Sort
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351263.html
Copyright © 2011-2022 走看看