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
    • 最新
    • 标签
主页 / user-6181

GoldenNewby's questions

Martin Hope
GoldenNewby
Asked: 2012-03-04 17:35:26 +0800 CST

计算每个 MySQL DB 的磁盘空间使用情况

  • 45

我目前正在使用 information_schema.TABLES 来计算按数据库名称分组的总磁盘空间使用量,但它的运行速度非常慢。在拥有数百个数据库的服务器上,计算可能需要几分钟时间。

按数据库计算磁盘空间使用量的最快方法是什么?我应该只看文件系统吗?有没有加快信息模式的方法?

mysql
  • 8 个回答
  • 121322 Views
Martin Hope
GoldenNewby
Asked: 2012-01-27 00:28:49 +0800 CST

内存少于 Index_length MyISAM

  • 4

我正在开发一个数据库来存储“时间序列”数据(此时 X 的值为 Y)。行本身非常小且大小固定,主键由两个 smallint 列、1 个 tinyint 列和 1 个 timestamp 列组成。每行的索引长度使用率非常低(大约 12 个字节),但是数据库将用于存储非常大量的数据。

所以问题是服务器最终将拥有比 MySQL 中该表的 index_length 大小更少的物理 RAM。发生这种情况意味着什么?我知道理论上 Linux 可以将内存交换到磁盘,但这是否会重复磁盘使用(因为已经存在一个 .MYI 文件)?无法将整个索引存储在 RAM 中对性能有何影响?对于 RAID 1 中的 SATA II 驱动器,我还能期望低于 10 毫秒的选择吗?

回应第一条评论以获取更多信息

目前我的问题是理论性的而不是实践性的。我正在从事的项目资金充足,从技术上讲我们可以负担 RAM 成本,但我更想知道没有足够的 RAM 来覆盖索引的影响。但无论如何,我还是会尝试回答。

从技术上讲,该项目具有无限 RAM,因此减少它的唯一原因是降低成本。

数据存储在 MyISAM 表中用于“历史”存储目的,但在前 24 小时左右存在于 NDBCluster 中(NDB Cluster 使用的索引 RAM 是 MyISAM 的大约 4 倍)。

我当然可以升级 RAM,但这样做会增加很多复杂性。

索引的MB使用量的答案是2.29MB,但毫无意义。现在我只是在测试数据结构的索引使用情况。2.29MB 包含 155,301 行(每行约 15.5 字节)。

...

所以我真正关心的只有一张桌子。其余的都非常小。表的结构如下:

CREATE  TABLE IF NOT EXISTS `monitor`.`result` (
  `server` SMALLINT UNSIGNED NOT NULL ,
  `ref_id` SMALLINT UNSIGNED NOT NULL ,
  `request` TINYINT UNSIGNED NOT NULL ,
  `recorded` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  `resolution` TINYINT NOT NULL ,
  `value` MEDIUMINT UNSIGNED NOT NULL ,
  PRIMARY KEY (`server`, `request`, `recorded`, `ref_id`) )
ENGINE = MyISAM

“ref_id”列存在的原因是为了缩小数据集所指的范围,使其超出服务器级别。因此,例如,我们可能拥有有关服务器上用户或设备的统计信息。

为什么我需要这么多内存

上表似乎不会使用那么多 RAM,而且在大多数实际情况下,它不会。我想存储尽可能多的数据。我知道我可以存储更少的数据,但我希望数据的分辨率尽可能高。磁盘空间很便宜,所以我什至不关心这个成本,但另一方面 RAM 可能会变得昂贵。尽管商业模式使得不必在任何程度上担心 RAM 成为可能,但我还是希望尽可能降低成本。

换句话说,我想为每个受监控的服务器每分钟最多存储 100 个统计信息。您可以看到在一千台服务器中行数迅速变大(100×1000×1044×365 = 38,106,000,000)。一千台服务器每年的预算是 120,000 美元(大量 RAM),但关键是要降低成本。

细化问题

我非常感谢到目前为止提供的答案,所以我会更具体一些,以更具体地解决我的问题。

到目前为止的答案让我认为我需要自己简单地做一些基准测试,看看会产生什么结果(为你开发!)。所以在这一点上,我真正面临的“问题”是 RAM 使用量将不可避免地达到数百 GB。

问题 1 ) 因此,如果我决定采用将大量数据放入 RAM 的方法,则需要将其分布在一堆服务器上。我已经使用 NDBCluster 执行此操作,但 NDBCluster 使用几乎 3 倍的 RAM 来存储相同的数据(15 字节对大约 48 字节)。在服务器集群的 RAM 中存储那么多数据的公认方法是什么?我应该实施一些应用程序级系统来与一堆 MyISAM 服务器集成吗?

问题 2)MyISAM 是数据库引擎的正确选择吗?我用 InnoDB 测试了一下,它似乎比 MyISAM 使用更多的 RAM 来处理索引。非 MySQL 解决方案呢?

问题 3 ) 将索引存储在磁盘上是否值得?那时我什至不应该创建一个索引,如果它无论如何都不会在 RAM 中(我非常怀疑)。

问题 4 ) 如果我选择不将数据放入 RAM 的方式,该项目推荐使用哪种磁盘设置?SSD 的 RAID?

问题 5 ) 不在索引中包含值和分辨率列是否值得?假设索引在磁盘上而不是在 RAM 中,我们在谈论浪费多少 CPU 时间?

非常感谢您的任何建议,一旦回答了这些问题(如果可能),我一定会选择一个答案

mysql myisam
  • 2 个回答
  • 1191 Views

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