performance - 高写入,偶尔读取(两者都必须很快),任何食谱?
问题描述
我有一个 16 GB 的内存服务器,单个 SQL 实例,最大内存(缓冲池)上限为 10 GB。.net 应用程序执行大量写入,必须快速(而且确实如此)。写入进入几个已分区且快速增长的表。该应用程序公开了用户可以在其中查看数据的 UI,但这是偶尔的。读取必须合理地呈现 < 2 秒。我的问题是我觉得我已经用尽了微调读取(现在大约 5 秒,但这很慢)。我还注意到缓冲池主要被这两个表的大容量数据消耗,也许这就是为什么一些需要其他表数据的读取速度很慢的原因,因为 SQL 必须进入磁盘?
是否有围绕这种负载的设计模式?大量写入大表(数百万行),并从这些表和其他低容量表中快速读取?
我发现在 SQL Server 中无法通过将 40% 分配给大表中的数据来控制缓冲池,而将 60% 用于其他数据以保持其高命中率并改善读取。
想法?
解决方案
在这种情况下,您应该对表进行分区。如果您不读取当前正在写入磁盘的数据,则映射到不同文件组的分区可能会最小化磁盘 IO。
推荐阅读
- c# - SignalR:无法访问默认集线器方法
- python - python -m chatterbot --version 的问题
- node.js - 如何在nodejs中使用google sheet api v4追加行
- wordpress - 将标签添加到标准 Wordpress 分类
- php - 备份管理器的 ShellProcessFailed 错误 - Laravel
- javascript - 如何通过onChange函数获取下拉列表的值和id并通过ajax
- javascript - Javascript keyup enter 无法正常工作
- c# - 获取 TableLayoutPanel 的克隆以进行拖放
- android - 为什么将 PROT_WRITE 标志添加到 /dev/binder 的 mmap() 后 Android 无法启动
- c - 如何从 Cortex M4 中的异常处理程序中保存调用堆栈?