zoukankan      html  css  js  c++  java
  • 14.10.1 InnoDB Disk I/O

    14.10 InnoDB Disk IO and File Space Management  InnoDB 磁盘IO和文件空间管理:
    
    14.10.1 InnoDB Disk I/O
    14.10.2 File Space Management
    14.10.3 InnoDB Checkpoints
    14.10.4 Defragmenting a Table
    14.10.5 Reclaiming Disk Space with TRUNCATE TABLE
    
    作为一个DBA,你必须管理disk I/O 来保持 I/O 子系统防止变的饱和,
    
    管理磁盘空间来避免存储满存储设备。
    
    
    ACID 设计模型需要一定数量的I/O,那个看起来是多余的,
    
    
    但是有助于确保数据的可靠性。 在这些约束下, InnoDB 尝试优化数据库负载和磁盘文件组织来
    
    最小化磁盘I/O总量。
    
    有时候,I/O 是延迟的直到数据库不是那么繁忙,或者直到everything 需要被带到一致性状态,
    
    
    比如在一个数据库重启在一个快速关闭。
    
    
    这个章节描述主要因素对于I/O和磁盘空间 
    
    
    1. 控制 background I/O 的数量用于改善查询性能
    
    2. 启用或者关闭提供额外的持久性 在代价为额外I/O的功能
    
    
    3.组织表到很多的小表, 更少的大文件, 或者是两者的结合
    
    4.平衡redo log 文件的大小 对I/O活动发生当log files 变满
    
    
    5.如何重新组织一个表用于优化查询
    
    
    
    14.10.1 InnoDB Disk I/O  InnoDB 磁盘I/O
    
    InnoDB 使用异步 disk I/O 在可能的情况下, 通过创建多个threads 来处理I/O操作,
    
    
    同时允许其他数据库操作来处理 当I/O是仍旧在进行中。
    
    
    在Linux和Windows 平台,InnoDB 使用可用的OS和library 函数来执行 异步I/O,
    
    
    在其他平台,InnoDB 仍旧使用I/O threads,但是the threads 可能实际等待I/O的请求来完成,
    
    这种技术被认为是 模拟异步I/O。
    
    
    Read-Ahead:
    
    
    如果InnoDB 可以决定有一个高概率,数据可能马上需要,它执行read-ahead 操作
    
    把数据加载到Buffer pool,这样就可以在内存里可用的。
    
    
    几个大的大请求对于连续的数据是更加有效的相比做一些小的请求,分散的请求,
    
    这里有两种预读算法在InnoDB:
    
    1. 顺序预读, 如果InnoDB 选项发现访问模式到segment 在tablespace 是顺序的,
    
    它提前post 一个批处理器读数据库页到I/O系统
    
    
    2.  在一个随机预读,如果InnoDB 注意一些区域在一个tablespace 看起来被全部读入到buffer pool,
    
    它post 剩下的读到I/O系统
    
    
    Doublewrite Buffer
    
    InnoDB 使用一个新的文件刷新技术涉及一个结构称为doublewrite buffer, 
    
    
    默认启用 (innodb_doublewrite=ON). 
    mysql> show variables like '%innodb_doublewrite%';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | innodb_doublewrite | ON    |
    +--------------------+-------+
    1 row in set (0.00 sec)
    
    
    它增加安全的恢复在一个crash或者断电, 通过降低 fsync() operations.来提高性能
    
    
    
    在写page 到一个数据文件,InnoDB 首先写他们到一个连续的tablespace area 称为 doublewrite buffer.
    
    
    只有在write和flush 到 doublewrite buffer 已经完成 InnoDB 写pages到它们的合适的位置在数据文件里
    
    。
    如果没有一个操作系统,
    存储子系统,或者mysqld 处理一个crash 在page中间
    

  • 相关阅读:
    组合数计算
    使用叉积判断两条直线是否相交
    关于括号的简单模拟题
    链表
    长句拆单词
    第九章 SpringCloud之Zuul路由
    第八章 SpringCloud之Feign、Hystrix结合使用
    第七章 SpringCloud之非声明式RestClient:Feign
    第六章 SpringCloud之Ribbon负载均衡
    第五章 SpringCloud之Eureka-Client使用RestTemplate实现服务之间的调用
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199688.html
Copyright © 2011-2022 走看看