AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 423377
Accepted
MikeN
MikeN
Asked: 2012-09-01 10:43:28 +0800 CST2012-09-01 10:43:28 +0800 CST 2012-09-01 10:43:28 +0800 CST

在高流量数据库服务器上有一个非常满的硬盘是不是很糟糕?

  • 772

为高流量生产数据库服务器运行带有 MySQL 的 Ubuntu 服务器。除了 MySQL 实例之外,机器上没有其他任何东西在运行。

我们将每日数据库备份存储在数据库服务器上,是否有任何性能影响或我们应该保持硬盘相对空闲的原因?如果磁盘被数据库和所有备份填满 86% 以上,是否会影响性能?

那么,以 86-90%+ 的满容量运行的数据库服务器在任何方面的性能都会比仅以 10% 的满磁盘运行的服务器好吗?

服务器上的总磁盘大小超过 1 TB,因此即使是 10% 的磁盘也足以进行基本的 O/S 交换等。

ubuntu
  • 5 5 个回答
  • 1497 Views

5 个回答

  • Voted
  1. Best Answer
    HeatfanJohn
    2012-09-01T11:11:13+08:002012-09-01T11:11:13+08:00

    首先,您不想将数据库备份保存在与数据库相同的物理驱动器或 RAID 组中。原因是磁盘故障(如果您在没有任何 RAID 保护的情况下运行)或灾难性的 RAID 故障(如果您使用 RAID-1 或​​ RAID-5)将导致您丢失数据库和数据库备份。

    您关于磁盘性能的问题与磁盘驱动器的满载程度有关,这取决于磁盘上数据的访问方式。对于旋转磁盘,有两个物理因素会影响 I/O 性能。他们是:

    • 寻道时间——磁盘驱动器将磁头从当前磁道位置移动到包含请求数据的磁道所花费的时间

    • 旋转延迟 - 这是驱动器旋转时所需数据到达读头所需的平均时间 - 对于 15K RPM 驱动器,这是 2 ms(毫秒)

    您的驱动器有多满会影响您服务器的 I/O 所经历的平均寻道时间。例如,如果您的驱动器已满,并且您的数据库表物理上位于磁盘盘片两端的驱动器上,那么当您执行 I/O 从这些表访问数据时,这些 I/O 将经历驱动器的最大寻道时间。

    尽管如此,如果您的驱动器已满并且您的应用程序仅访问存储在驱动器上的一小部分数据并且所有这些数据都连续位于驱动器上,那么这些 I/O 将受寻道时间的影响最小.

    不幸的是,这个问题的答案是“你的里程会有所不同”,这意味着你的应用程序如何访问数据以及数据所在的位置将决定你的 I/O 性能。

    此外,正如@gravyface 所提到的,将操作系统存储需求与数据库分开是“最佳实践”。同样,这将有助于最大程度地减少磁盘表面上的磁头移动,因为在同一驱动器上同时使用这两个驱动器可能会导致操作系统和驱动器的数据库区域之间不断寻找,因为操作系统和数据库软件都会发出 I/O 请求。

    • 11
  2. voretaq7
    2012-09-01T11:33:42+08:002012-09-01T11:33:42+08:00

    这里有两个角度需要考虑:性能和稳健性。

    在性能方面,通常建议使用单独的磁盘轴(或 RAID 组/驱动器组)用于:

    1. 操作系统的东西(二进制文件、日志、主目录等)
    2. 交换空间(如果您不希望使用交换空间,可以与 (1) 结合使用)
    3. 生产数据库
    4. 生产数据库的事务日志(如果使用)
    5. 数据库转储/备份

    这背后的原因非常简单:您不希望数据库性能受到需要磁盘的“其他东西”的影响(例如,如果机器开始大量交换并且交换分区位于磁盘的另一侧,您可以使用数据库数据)有长盘寻求抗衡)。


    从稳健性的角度来看,您想要相同类型的故障,但出于不同的原因:正如其他人指出的那样,您不希望出现故障的磁盘同时删除您的数据库及其备份(尽管实际上您应该复制备份服务器无论如何在发生灾难性故障的情况下)。

    /您还希望避免使用包含所有内容的单一分区的任何配置——这是 Linux 世界中一个不幸的、悲惨的和令人震惊的常见错误,其他类 Unix 系统不存在这种错误。
    正如 Gravyface 在他的评论中提到的,如果你以某种方式设法填满你的系统几乎肯定会崩溃,如果系统只有一个分区而不是一个结构良好的挂载点层次结构/,清理/恢复可能会耗时且成本高昂。/

    • 8
  3. gravyface
    2012-09-01T10:52:08+08:002012-09-01T10:52:08+08:00

    我建议将数据库和临时(见下文)备份移动到与根目录 (/) 不同的分区。

    此外,为您的(假设的)压缩数据库转储备份提出一个合理的轮换/保留方案。(通常)没有理由在本地磁盘上保留那么多备份副本。对灾难恢复没有任何作用,当移动到异地时,应该从磁盘上删除。

    这几乎是标准的操作程序。

    • 5
  4. M Afifi
    2012-09-01T14:02:20+08:002012-09-01T14:02:20+08:00

    这让我想起了 NetApp 上的一个错误,其中接近满的文件系统的性能会显着下降(比如一半)。(诚​​然,那是几年前的事了)。

    每个人都说答案是视情况而定,但值得仔细考虑。

    完整文件系统的主要缺点是空闲 inode 列表可能是碎片化的并且到处都是。

    数据库的硬盘上有三种类型的数据。

    1. 您的实际数据库文件。这将是一个大的预分配文件,通常以大块的形式增长(例如 10%)。
    2. 日志,您的事务日志正在不断写入、删除、写入等...
    3. 无法在内存中运行的大型查询的临时文件。

    (1) 只有在为文件集分配更多空间时才需要可用空间。如果您的数据库没有增长,它应该不会受到磁盘空间不足文件系统的影响。如果它正在分配,它可能会要求一个非常大的块,该块不适合任何空闲列表,您会立即碎片化您的数据库,并在需要数据准备到内存时导致查找。

    (2) 天真的日志实现使用操作系统来管理分配空间和删除它会受到影响。假设您的数据库不是只读的,将会有源源不断的日志流,它们会经常在低硬盘空间上碎片化。最终这会损害您的写入性能。

    (3) tempDB,如果数据库需要它来处理伪劣的写入查询,或者内存不足,那么你会遇到比磁盘空间不足导致性能问题更大的问题,因为那时你的读取性能可能会受磁盘限制。如果 MySql 需要为 tempDB 分配磁盘空间并且硬盘用完了,您还会面临中断的风险。

    关于备份...

    1. 我工作过的每个企业都在同一台机器上保存备份。谈到恢复(谁在乎备份,重要的是恢复)。没有什么比将 db 文件放在同一个磁盘上的速度更快了。
    2. 希望很明显,确保备份不仅仅是本地的。

    简而言之,我会说只要您的数据库不重写,您就可以生存。如果是,则磁盘空间不足是个问题。但如果我是你,我会尽快进行以下工作。

    1. 确认我有足够的内存
    2. 从您的数据库中分离日志和所有临时数据。
    3. 将您的操作系统、MySql 安装与其余部分分开。

    如果可以,请使用单独的主轴和控制器 1。

    其次是独立的主轴

    其次是一个穷人的单独分区。

    • 4
  5. hlosukwakha
    2012-09-04T10:06:02+08:002012-09-04T10:06:02+08:00

    最近,当我用完其中一台复制服务器上的所有磁盘空间时,我遇到了类似的问题。直接影响是复制崩溃,然后我无法登录 MySQL,因为无法打开 mysqld.sock 文件。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve