行填充以获得更高的性能

gar*_*rik 6 performance sql-server

我读过一篇文档(设计高度可扩展的 OLTP 系统),其中描述了如何获得更高性能的技巧:

由于行很小(很多适合一页),多个锁可能会争用一个 PAGELATCH。我们可以“浪费”一点空间来获得更多性能。解决方案:用 CHAR 列填充行以使每一行占据整页。

有没有人使用这种方法?你得到了什么结果?

谢谢你。

添加:

警告。链接的文章不是行动指南。Thomas Kejser描述了对 TB 级数据库的测试,仅此而已

Mar*_*ith 6

我只是简单地浏览了该文档,但我的第一个想法是“哦,SQLCAT 出版物”。这些人推出了一些很棒的材料,但他们的大部分指导都来自于突破界限的极端情况。

您可以从数百万美元的实现中的 SQL Server 行为中学到很多东西,但很少适用于典型安装。此特定文档是测试 10k/tps、256 核、500 轴系统的结果。

在现实世界中,您不会将 SQL Server 内部结构推向超出其预期限制的范围,这些是有趣的消遣,而不是建议。

你的问题可能有点危险。一个不经意的路人可能会阅读您的问题,简要浏览链接的文档并得出结论,填充行以填充页面是一个好主意。

如果我有 256 个内核和 500 个磁盘,提供 18GB/秒的速度,但我看到 PAGELATCH_EX 等待我高度专业化的工作负载 xyz,我是否会通过填充行来填充页面来增加吞吐量?

是的。正如托马斯·凯瑟 (Thomas Kejser) 所证明的那样。

我们都应该做同样的事情吗?

绝对不!

  • 那个加里克绝对没有错,没有冒犯的意思。 (2认同)