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 / 问题 / 19015
Accepted
Deepak M
Deepak M
Asked: 2012-06-10 03:02:23 +0800 CST2012-06-10 03:02:23 +0800 CST 2012-06-10 03:02:23 +0800 CST

我们可以为特定表分配 mysql Key_buffer_size 值吗?

  • 772

在一些文档中,我发现我们可以将 key_buffer_size 分配给 myisam 表。这还包括以下步骤:

SET GLOBAL myisam_table.key_buffer_size = 4194304;

CACHE INDEX test.myisam_table IN myisam_table;

LOAD INDEX INTO CACHE test.myisam_table;

该命令运行良好。

但是我怎样才能看到key_buffer_size不是全局的 MyISAM 表呢?

是否有任何其他支持类似功能的 MySQL 引擎?

mysql mysql-5.5
  • 2 2 个回答
  • 5662 Views

2 个回答

  • Voted
  1. Mahesh Patil
    2012-06-10T03:46:32+08:002012-06-10T03:46:32+08:00

    您不能为特定表提供此值,此值表示 MyISAM 表的索引块已缓冲并由所有线程共享。key_buffer_size是用于索引块的缓冲区大小。密钥缓冲区也称为密钥缓存。

    http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size

    InnoDB 引擎类型确实支持名为innodb_buffer_pool_size 的类似选项

    InnoDB 用于缓存其表的数据和索引的内存缓冲区的大小(以字节为单位)。默认值为 8MB。该值设置得越大,访问表中的数据所需的磁盘 I/O 就越少。在专用数据库服务器上,您最多可以将其设置为机器物理内存大小的 80%。但是,不要将它设置得太大,因为物理内存的竞争可能会导致操作系统中的分页。

    • 2
  2. Best Answer
    RolandoMySQLDBA
    2012-06-10T11:42:42+08:002012-06-10T11:42:42+08:00

    在您的问题中,您给出了设置专用密钥缓存的正确语法(请参阅LOAD INDEX INTO CACHE)

    我之前写过这个

    • RAM 小于 Index_length MyISAM
    • 具有主键和 varchar 值的最佳表设计 mysql

    一旦您将一个或多个表分配给专用密钥缓存并运行LOAD INDEX INTO CACHE:

    • 缓存的索引将
      • 从默认密钥缓存中删除
      • 在重新启动 mysqld 之前不要回到默认密钥缓存(安装程序在 init 文件中重新加载)
    • 您所能知道的就是哪些表不会进入默认键缓存

    如果要确保缓存的内容不会过多,请执行以下操作:

    STEP01) 运行这个查询

    SELECT CONCAT(ROUND(KBS/POWER(1024,
    IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
    SUBSTR(' KMG',IF(PowerOf1024<0,0,
    IF(PowerOf1024>3,0,PowerOf1024))+1,1))
    recommended_key_buffer_size FROM
    (SELECT LEAST(POWER(2,32),KBS1) KBS
    FROM (SELECT SUM(index_length) KBS1
    FROM information_schema.tables
    WHERE engine='MyISAM' AND
    table_schema NOT IN ('information_schema','mysql')) AA ) A,
    (SELECT 2 PowerOf1024) B;
    

    这将计算默认密钥缓存应该有多大(以 MB 为单位)以保存所有 MyISAM 索引页面。

    STEP02) 分配推荐号码

    假设来自 STEP01 的查询是 5G。

    • 如果您的机器只有 4GB 或 RAM,显然不要分配它。使用推荐值的一半 (2G)。
    • 如果您的机器有 10G,请继续为密钥缓存分配 5G

    所以在第一种情况下

    [mysqld]
    key_buffer_size=2G
    

    在第二种情况下

    [mysqld]
    key_buffer_size=5G
    

    STEP03)service mysql restart

    STEP04) 运行您的生产系统一周

    STEP05) 运行这个查询

    SHOW GLOBAL STATUS LIKE 'Key_blocks_used';
    SHOW GLOBAL STATUS LIKE 'key_cache_block_size';
    

    无论这两个数字返回什么,相乘并除以 1048576。这将为您提供在 MyISAM 密钥缓存中使用了多少 MB 的空间。将该数字乘以 1.05 并将其四舍五入到最接近的整数。无论该数字是多少,这就是您用作 key_buffer_size 最终值的数字。

    您必须在 6 个月内再次执行这 5 个步骤,以确保 MyISAM 数据索引的工作集具有最安全的值。它还可能显示您是否需要在 DB 服务器上扩展 RAM。

    • 1

相关问题

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

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

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

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

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

Sidebar

Stats

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

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 7 个回答
  • 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
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +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
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +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