问题标签 [database-performance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
15 回答
206136 浏览

在性能开始下降之前 MySQL 数据库可以有多大

MySQL 数据库从什么时候开始性能下降?

  • 物理数据库大小重要吗?
  • 记录数量重要吗?
  • 性能下降是线性的还是指数的?

我有一个我认为是大型数据库的数据库,大约有 1500 万条记录,占用了将近 2GB 的空间。基于这些数字,我是否有动力清理数据,或者我是否可以安全地让它继续扩展几年?

0 投票
8 回答
19354 浏览

MySQL Partitioning / Sharding / Splitting - 走哪条路?

我们有一个大约 70 GB 的 InnoDB 数据库,我们预计它会在未来 2 到 3 年内增长到数百 GB。大约 60% 的数据属于单个表。目前数据库运行良好,因为我们有一个 64 GB RAM 的服务器,所以几乎整个数据库都可以放入内存,但我们担心未来数据量会变得相当大。现在我们正在考虑某种拆分表格的方法(尤其是占数据最大部分的表格),我现在想知道,最好的方法是什么。

我目前知道的选项是

  • 使用 5.1 版附带的 MySQL 分区
  • 使用某种封装数据分区的第三方库(如休眠分片)
  • 在我们的应用程序中自己实现它

我们的应用程序建立在 J2EE 和 EJB 2.1 之上(希望有一天我们会切换到 EJB 3)。

你有什么建议?

编辑(2011-02-11):
只是一个更新:目前数据库的大小是 380 GB,我们的“大”表的数据大小是 220 GB,它的索引大小是 36 GB。因此,虽然整个表不再适合内存,但索引却可以。
系统仍然运行良好(仍然在相同的硬件上),我们仍在考虑对数据进行分区。

编辑(2014-06-04):另一个更新:整个数据库的大小是 1.5 TB,我们的“大”表的大小是 1.1 TB。我们将服务器升级到具有 128 GB RAM 的 4 处理器机器(Intel Xeon E7450)。该系统仍然运行良好。我们接下来计划做的是将我们的大表放在单独的数据库服务器上(我们已经在软件中进行了必要的更改),同时升级到具有 256 GB RAM 的新硬件。

这种设置应该持续两年。然后我们要么必须最终开始实施分片解决方案,要么只购买具有 1 TB RAM 的服务器,这应该会让我们持续一段时间。

编辑(2016-01-18):

从那以后,我们将我们的大表放在单独服务器上的它自己的数据库中。目前,这个数据库的大小约为 1.9 TB,另一个数据库(除了“大”表之外的所有表)的大小为 1.1 TB。

当前硬件设置:

  • HP ProLiant DL 580
  • 4 x Intel(R) Xeon(R) CPU E7-4830
  • 256 GB 内存

此设置的性能很好。

0 投票
2 回答
4163 浏览

慢查询/禁用高速缓存 - Sybase Adaptive Server

在客户端数据库的 Sybase v10 上,此查询似乎运行得非常慢(400 万条记录需要 25 秒!):

以 tnr 为主键。

但是,如果我在我们的服务器上以 1000 倍的速度运行它,它似乎运行得很快(15 毫秒……),这让我认为这是因为查询结果被缓存了。有没有办法在 Sybase 中禁用此查询(或整个数据库)的缓存以重现此问题?

我试过了:

但似乎没有奏效。

0 投票
8 回答
59918 浏览

NULL 值如何影响数据库搜索的性能?

在我们的产品中,我们有一个通用的搜索引擎,并试图优化搜索性能。查询中使用的许多表都允许空值。我们是否应该重新设计我们的表以禁止空值进行优化?

我们的产品同时在Oracle和上运行MS SQL Server

0 投票
2 回答
5707 浏览

代理与自然键:性能差异的硬数字?

在代理键和自然键之间有一个健康的争论:

所以发布 1

所以发布 2

我的观点似乎与大多数人一致(这是微弱的多数),您应该使用代理键,除非自然键是完全明显的并且保证不会改变。然后你应该对自然键强制唯一性。这意味着几乎所有时间都使用代理键。

两种方法的示例,从 Company 表开始:

1:代理键:表有一个ID字段,即PK(和一个身份)。公司名称在各州必须是唯一的,因此那里有一个唯一的约束。

2:自然键:表使用CompanyName和State作为PK——同时满足PK和唯一性。

假设公司 PK 在其他 10 个表中使用。我的假设是,没有数字支持,代理键方法在这里会快得多。

对于自然键,我看到的唯一令人信服的论点是使用两个外键作为自然键的多对多表。我认为在这种情况下这是有道理的。但是如果你需要重构,你可能会遇到麻烦;我认为这超出了这篇文章的范围。

有没有人看过一篇文章比较使用代理键的一组表与使用自然键的同一组表的性能差异?环顾 SO 和谷歌并没有产生任何有价值的东西,只是大量的理论。


重要更新:我已经开始构建一组测试表来回答这个问题。它看起来像这样:

  • PartNatural - 使用唯一 PartNumber 作为 PK 的零件表
  • PartSurrogate - 使用 ID (int, identity) 作为 PK 并在 PartNumber 上具有唯一索引的部件表
  • 植物 - ID (int, identity) 作为 PK
  • Engineer - ID (int, identity) 作为 PK

每个零件都连接到工厂,工厂中零件的每个实例都连接到工程师。如果有人对此测试台有疑问,现在是时候了。

0 投票
7 回答
17748 浏览

如何在 Sql Server Mgmt Studio 中测试性能而不输出数据?

使用 SQL Server 管理工作室。

如何在结果窗口不影响我的测试的情况下测试大型选择(比如 600k 行)的性能?所有事情都相同并不重要,因为这两个查询都将输出到同一个地方。但我想加快我的测试周期,我认为 SQL Server Management Studio 的输出设置妨碍了我。输出到文本是我目前正在使用的,但我希望有更好的选择。

我认为这会影响我的数字,因为数据库在我的本地盒子上。

编辑:有一个关于在此处执行 WHERE 1=0 的问题(认为会发生连接但没有输出),但我对其进行了测试,但它不起作用——这不是查询性能的有效指标。

0 投票
3 回答
1259 浏览

使用 SQL Server 扩展属性的性能注意事项

对所有人,

我们希望使用扩展属性作为我们数据库文档的一部分。我的一位同事提到,在之前的项目中,他们使用了扩展属性,它影响了数据库性能。

我一直在互联网上搜索有关这方面的任何确凿信息。我什么也没找到。

有没有人遇到过这个?如果是这样,是否有文章或链接可供我阅读?

谢谢-Do先生

注意:这是一个 SQL Server 2005 数据库。

0 投票
2 回答
1268 浏览

如何在高负载需求下正确测试数据库性能?

我发现了很多关于压力测试 Web 应用程序的主题。

我的目标不同,它只测试数据库(sybase sql Anywhere 9)。

我需要的:

  • 一些工具可以对所有 sql 进行诊断并找到瓶颈。我希望我可以轻松地宏观查看整个系统。
  • 设计/构建良好 sql 查询的最佳实践。

系统问题如下:

  • 20GB 数据库大小。
  • 每秒 2-5 个请求
  • 代码中散布着上千条sql(这种乱七八糟的只能重写系统解决)。
0 投票
4 回答
4714 浏览

Sql COUNT 性能问题

示例表的结构:

我需要知道是否存在以下性能差异:

还是不存在差异?

0 投票
3 回答
410 浏览

auto_increment 值的变化会影响 MySQL 的性能吗?

我已将 MyISAM 表的 auto_increment 值更改为 1000000。这会影响读/写性能吗?我认为每次请求行列表时,数据库引擎可能会在 ID 1000000 之前查找 ID。