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
    • 最新
    • 标签
主页 / dba / 问题 / 143849
Accepted
user69153
user69153
Asked: 2016-07-15 01:46:52 +0800 CST2016-07-15 01:46:52 +0800 CST 2016-07-15 01:46:52 +0800 CST

Innodb_buffer_pool解释

  • 772

标题可能有点误导,因为我完全了解 innodb 缓冲池的概念,但想了解有关它的计算过程的一些具体信息。

根据 mysql 文档:

在专用数据库服务器上,您可以将缓冲池大小设置为机器物理内存大小的 80%。

现在,当我们谈论实际数字时,百分比方法在这里有何意义?

比方说,目前我的数据库使用 80 GB 的 RAM,而 20 GB 的 RAM 留给其他任务使用。一段时间后,我的数据库变大了,我决定增加缓冲池的大小。为了保持 80% 的比例,我必须增加服务器的总内存,即使其他进程不需要更多内存。为什么不在为其他任务保留相同的 20gb ram 的同时添加额外的 ram?

mysql innodb
  • 3 3 个回答
  • 932 Views

3 个回答

  • Voted
  1. Best Answer
    Károly Nagy
    2016-07-15T02:27:31+08:002016-07-15T02:27:31+08:00

    80% 只是帮助人们从比默认值更合理的值开始的一般经验法则。

    缓冲池大小的计算实际上可能更复杂。理想情况下,经常访问的数据页应该保留在缓冲池中,并且您不希望因为它对性能的影响而发生太多驱逐。这同样是通用的,但更现实的衡量标准是让缓冲池足够大以容纳热数据 + 足够的空间以避免不频繁的读取触发过多的驱逐。

    仅仅因为您有一个 1TB 大的数据库,如果您一直只读取相同的 100MB,那么您就不必拥有 1Tb 的缓冲池。

    还要记住,插入和更新也会影响缓冲池的使用,因为操作发生在那里。您应该尝试匹配您可以写入 innodb 日志的数据量(由 控制innodb_log_file_size)和缓冲池中为此所需的空间。即使您有很大的 innodb 日志文件,但没有足够的空间用于插入,驱逐也会导致将数据页刷新到表​​空间,这在本质上与检查点具有相同的效果。

    正确调整缓冲池大小的一种经验方法是设置与数据大小一样高(或尽可能大)并在其上运行正常生产负载,同时不断减小大小,同时测量事务率、响应时间和threads_running. 当您看到性能开始下降时,这至少是您需要的大小。

    • 4
  2. Rick James
    2016-07-16T22:08:11+08:002016-07-16T22:08:11+08:00

    我更喜欢说“可用RAM 的 70%”。所以,70% * (80-20) = 56。但是,实际上,很难预测 mysqld 将使用多少“其他”内存。

    从另一边看,buffer_pool 不需要比所有 Data_length + Index_length 的总和多很多,从SHOW TABLE STATUS.

    这是一个更长的讨论。

    • 1
  3. Rathish Kumar B
    2017-01-10T04:07:21+08:002017-01-10T04:07:21+08:00

    最终目标是将整个数据库保存在内存中以提高性能。但是,实际上并不总是可能的。例如,考虑 2 TB 的数据库大小。在这种情况下,由于资源限制,我们无法分配 2 TB RAM。所以我们应该尽量在内存中至少保留工作数据集。识别实际工作集数据是一个非常复杂的过程,所以我们应该尽量设置最大可能值。所以,这里总可用内存的 80% 将是一个不错的选择。因为我们也需要其他进程的内存。

    当您将整个内存分配给 InnoDB 缓冲池时,其他进程会竞争内存。这将导致交换。Swapping在数据库服务器中是最糟糕的。innodb_buffer_pool_size因此,您必须根据要求从变量的较小值开始到较高值。

    要回答您的问题,当您知道数据库大小在增长时,只需从总可用 RAM 的 80% 开始并开始监视您的 InnoDB 内存状态。如果 MySQL 使用了 95% 以上InnoDB buffer pool,那么你应该考虑增加innodb_buffer_pool_size.一些有用的命令来做到这一点:

    show global status like '%innodb_buffer_pool_pages_data%';
    show global status like '%innobd_buffer_pool_pages_free%';
    show global status like '%innodb_page_size%';
    show global status like '%innodb_buffer_pool_reads%';
    show global status like '%innodb_buffer_pool_read_requests%';
    

    还有一个:

    SHOW ENGINE INNODB STATUS;
    

    找到Free Buffers和部分Buffer Pool hit ratio。查看此页面以了解 InnoDB 缓冲池、相关变量以及如何为 InnoDB 缓冲池分配内存。BUFFER POOL AND MEMORY

    为其他进程保留 20% 的剩余内存是安全的,以避免在最坏的情况下发生交换。我希望这能帮到您!。

    • 1

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

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

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve