zoukankan      html  css  js  c++  java
  • 22. 磁盘I/O问题

    1. 磁盘I/O问题

    作为应用系统的持久化层,不管数据库采取了什么样的 Cache 机制,但数据库最终总是要将数据储存到可以长久保存的I/O设备──磁盘上,但磁盘的存取速度显然要比CPU、RAM 的速度慢很多,因此,对于比较大的数据库,磁盘 I/O 一般总会成为数据库的一个性能瓶颈!

    我们前面提到的 SQL 优化、数据库对象优化、数据库参数优化,以及应用程序优化等,大部分都是想通过减少或延缓磁盘读写来减轻磁盘 I/O 的压力及其对性能的影响。解决磁盘 I/O 问题,减少或延缓磁盘操作肯定是一个重要方面,但磁盘 I/O 是不可避免的,因此,增强磁盘 I/O 本身的性能和吞吐量也是一个重要方面。

    1.1 使用磁盘阵列

    1.2 使用Symbolic Links分布I/O

    MySQL 的数据库名和表名是与文件系统的目录名和文件名对应的,默认情况下,创建的数据库和表都存放在参数 datadir 定义的目录下。这样如果不使用 RAID 或逻辑卷,所有的表都存放在一个磁盘设备上,无法发挥多磁盘并行读写的优势!在这种情况下,我们就可以利用操作系统的符号连接(Symbolic Links)将不同的数据库或表、索引指向不同的物理磁盘,从而达到分布磁盘 I/O 的目的。

    (1)将一个数据库指向其他物理磁盘

    (2)将MyISAM(其他存储引擎的表不支持)表的数据文件或索引文件指向其他物理磁盘。

    (3)在Windows下使用符号连接。

    1.3 禁止操作系统更新文件的atime属性

    atime 是 Linux/UNIX 系统下的一个文件属性,每当读取文件时,操作系统都会将读操作发生的时间回写到磁盘上。对于读写频繁的数据库文件来说,记录文件的访问时间一般没有任何用处,却会增加磁盘系统的负担,影响 I/O 的性能!因此,可以通过设置文件系统的 mount属性,阻止操作系统写 atime 信息,以减轻磁盘 I/O 的负担。

    1.4 用裸设备(Raw Device)存放InnoDB的共享表空间

    MyISAM 存储引擎有自己的索引缓存机制,但数据文件的读写完全依赖于操作系统,操作系统磁盘 I/O 缓存对 MyISAM 表的存取很重要。但 InnoDB 存储引擎与 MyISAM 不同,它采用类似 Oracle 的数据缓存机制来 Cache 索引和数据,操作系统的磁盘 I/O 缓存对其性能不仅没有帮助,甚至还有反作用。因此,在 InnoDB 缓存充足的情况下,可以考虑使用 Raw Device 来存放 InnoDB 共享表空间。

  • 相关阅读:
    AJAX异步传输——以php文件传输为例
    js控制json生成菜单——自制菜单(一)
    vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
    SQL数据库连接到服务器出错——无法连接到XXX
    PHP错误:Namespace declaration statement has to be the very first statement in the script
    【LeetCode】19. Remove Nth Node From End of List
    【LeetCode】14. Longest Common Prefix
    【LeetCode】38. Count and Say
    【LeetCode】242. Valid Anagram
    【LeetCode】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/wubug/p/13526443.html
Copyright © 2011-2022 走看看