将数据和索引数据保存在内存中 - InnoDB 与 MyISAM

2024-02-11

假设数据库由 1 GB 数据和 1 GB 索引数据组成。

为了最大限度地减少磁盘 IO 从而最大限度地提高性能,我想为 MySQL 分配内存,以便包括索引的整个数据集都可以保存在 RAM 中(假设机器有充足的 RAM)。

InnoDB参数innodb_buffer_pool_size用于指定 InnoDB 用于缓存其表的数据和索引的内存缓冲区的大小。 (注:内存用于存储数据AND索引。)

MyISAM 参数key_buffer_size用于指定 MyISAM 用于缓存其表索引的内存缓冲区的大小。 (注:内存使用ONLY用于索引。)

如果我想要 2 GB 数据库(1 GB 数据和 1 GB 索引)适合 InnoDB 下的内存,我只需配置innodb_buffer_pool_size to be 2GB。这 2 GB 将保存数据和索引。

但是,当设置MyISAM键时key_buffer_size to 2GB该空间将用于索引,但不用于数据。

我的问题是:

  • MyISAM的“数据缓冲区大小”(不是索引数据)可以显式配置吗?
  • MyISAM什么时候会从磁盘读取表数据(不包括索引数据),什么时候会从内存读取?

  • 没有MyISAM没有通用数据缓存。这记录在“key_buffer_size”描述中官方文档 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size: This is because MySQL relies on the operating system to perform file system caching for data reads, so you must leave some room for the file system cache.

现代操作系统,尤其是 Linux,往往具有非常智能的虚拟内存子系统,它将经常访问的文件保留在页面缓存中,因此当工作集适合可用内存时,磁盘 I/O 保持在最低限度。

  • 所以回答你的第二个问题:从来没有。

对于各种 myisam 变量,例如 read_buffer_size、read_rnd_buffer_size、sort_buffer_size、join_buffer_size 等,不要陷入“缓冲区过大”的情况,这一点很重要,因为有些变量是动态分配的,所以更大并不总是意味着更快 - 有时甚至可能更慢 -看到这个post http://www.mysqlperformanceblog.com/2006/06/06/are-larger-buffers-always-better/在 mysqlperformanceblog 上有一个非常有趣的案例。

如果您使用的是 posix 平台上的 5.1,您可能需要进行基准测试myisam_use_mmap http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_myisam_use_mmap就您的工作负载而言,它应该通过减少 malloc() 调用的数量来帮助高争用情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据和索引数据保存在内存中 - InnoDB 与 MyISAM 的相关文章

  • JDBC 错误:在结果集开始之前[重复]

    这个问题在这里已经有答案了 我在 Java Eclipse 中收到错误消息 我在 MySql 中有一个数据库 它有列 String user name int id time int id desk int user password 我想
  • 如何使用Java获取特定模式的所有表及其列?

    我有一个数据库架构 其名称为 Navid 这个模式中有很多表 当然每个表都有一些列 我需要的是一个java类 连接到我的数据库 有一个在所有表上循环的方法 2 1 有一个内部循环来定义表的所有列 制作创建表查询语句 我想在另一个数据库中创建
  • 巩固 Django 南迁移

    在我的项目的初始阶段 我对模型进行了很多更改 因此我最终为我的应用程序生成了很多向南迁移 在转到我的生产服务器执行迁移之前 是否可以以任何方式整合它们 这样我就不会为每个应用程序进行一百万次迁移 如果是这样 我该怎么做呢 您始终可以删除现有
  • 将IP保存到数据库中

    当用户登录时 我想将他们的 IP 保存在数据库中 我该怎么做呢 MySQL 字段最适合使用哪种类型 获取IP的PHP代码是什么样的 我正在考虑将其用作登录 会话内容的额外安全功能 我正在考虑使用用户现在拥有的 IP 检查用户从数据库登录的
  • “修改列”与“更改列”

    我知道 我们不能使用重命名列MODIFY COLUMN语法 但我们可以使用CHANGE COLUMN syntax 我的问题是 主要用途是什么modify syntax 例如 ALATER TABLE tablename CHANGE co
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • 为什么改变对象的 [[prototype]] 会降低性能?

    来自 MDN 文档standard setPrototypeOf功能 https developer mozilla org en US docs Web JavaScript Reference Global Objects Object
  • 使用 React.forwardRef 与自定义 ref prop 的价值

    我看到React forwardRef从反应文档来看 似乎是将引用传递给子功能组件的认可方式 const FancyButton React forwardRef props ref gt
  • 防止 Propel 插入空字符串

    当未设置列时 如何防止 Propel ORM 插入空字符串 CREATE TABLE user uid INTEGER PRIMARY KEY AUTO INCREMENT email VARCHAR 255 NOT NULL UNIQUE
  • 如何使用 Wix 运行 sql 脚本创建数据库

    我在使用 Wix 创建数据库时遇到问题 我能找到的示例 参见下面的链接 都是首先使用 wix 创建数据库并运行创建表 sql 脚本 问题是我需要将 wix 设置为使用 CREATE DATABASE 运行 sql 脚本来创建数据库和表 而不
  • mysql 如何将 varchar(10) 转换为 TIMESTAMP?

    我已将所有日期存储到数据库中varchar 10 现在我想将它们转换为 TIMESTAMP 当我运行sql时 ALTER TABLE demo3 CHANGE date date TIMESTAMP NOT NULL 它提醒 1292 In
  • Python if 与 try- except

    我想知道为什么下面程序中的 try except 比 if 慢 def tryway try while True alist pop except IndexError pass def ifway while True if alist
  • MySQL NOT IN 来自同一个表中的另一列

    我想运行 mysql 查询来选择表中的所有行films其中的值title该列不存在于另一列的所有值中的任何位置 collection 这是我的表格的简化版本 其中包含内容 mysql gt select from films id titl
  • pg_restore错误:角色XXX不存在

    尝试将数据库从一个系统复制到另一个系统 涉及的版本是9 5 0 源 和9 5 2 目标 源数据库名称是foodb与主人pgdba并且目标数据库名称将被命名foodb dev与主人pgdev 所有命令都在将托管副本的目标系统上运行 The p
  • 从表中选择行,其中另一个表中具有相同 id 的行在另一列中具有特定值

    在 MySQL 中 如果我们有两个表 comments key value 1 foo 2 bar 3 foobar 4 barfoo and meta comment key value 1 1 2 1 3 2 4 1 我想得到来自以下人
  • 研究MySQL、SQLite源码了解RDBMS实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道实现数据库是一个很大的话题 但我想通过研究数据库系统的源代码来基本了解数据库系统的工作原理 例如
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐