gpt4 book ai didi

sql-server-2008 - 从 .NET 代码插入 SQL Server 表的最快方法?

转载 作者:行者123 更新时间:2023-12-04 02:17:50 28 4
gpt4 key购买 nike

执行此操作的最快方法是什么:

  • 一张表,没有我无法预填的引用(即那里有一个引用键,但我已填写了所有数据)
  • 大量数据。我们每天谈论数亿行,通过 API 动态输入
  • 在近乎实时的情况下,必须/应该尽快处理请求(即每天不写出文件以上传一个)。 2 秒是正常的最大延迟
  • 用于数据/应用程序和 SQL Server 的单独机器

  • 我现在应该做什么:
  • 最多将 32*1024 行聚合到一个数组中,然后将其排队。
  • 以 2-3 个线程读取队列。使用 SqlBulkCopy 插入数据库。

  • 我每秒导入大约 60k-75k 行,这还不够,但非常接近。我很想达到 250.000 行。

    到目前为止,还没有真正使用。我得到 20% 的时间“网络 I/O”块,有一个核心 80% 负载 CPU 侧。光盘正在写出 7mb-14mb,大部分是闲置的。 6 个猛禽的 RAID 10 上的平均队列长度是.... 0.25。

    有人知道如何加快速度吗?更快的服务器(到目前为止它是虚拟的,8GB 内存,4 核,物理磁盘传递数据)。

    添加一些说明:
  • 这是 2008 R2 服务器上的 2008 R2 Enterprise SQL Server。机器有 4 个内核,8GB 内存。都是 64 位的。 80% 的平均负载来自这台机器,显示大约 20% 的 CPU 负载。
  • 该表很简单,没有主键,只有关系引用(仪器引用)上的索引和唯一的(在一组仪器中,因此不强制执行)时间戳。
  • 表上的字段是:时间戳、工具引用(无强制外键)、数据类型(char 1,表示发布的数据的多个字符之一)、价格(double)和交易量(int)。如您所见,这是一张非常薄的 table 。有问题的数据是金融工具的报价数据。
  • 问题也与硬件等有关 - 主要是因为我看不到真正的瓶颈。我插入了多个交易,它给了我一个好处,但很小。磁盘、CPU 未显示显着负载,网络 io 等待很高(300 毫秒/秒,目前为 30%),但这是在运行 JSUT 两个服务器的同一个虚拟化平台上,并且有足够的内核来运行所有服务器。我几乎愿意“购买另一台服务器”,但我想首先确定瓶颈......尤其是在一天结束时我没有捕获瓶颈是什么。日志记录无关紧要 - 批量插入不会作为数据(无聚集索引)进入数据日志。

  • 垂直分区是否会有所帮助,例如通过一个字节 (tinyint) 将仪器宇宙拆分为 16 个表,因此我可以同时进行多达 16 个插入?实际上,数据来自不同的交换,我可以为每个交换进行分区。这将是一个自然的分割场(实际上是在乐器中,但我可以在这里复制这些数据)。

    更多说明:获得更高的速度(90k),现在显然受到机器之间网络 IO 的限制,这可能是 VM 切换。

    我现在做的是每 32k 行做一个连接,建立一个临时表,用 SqlBUlkdCopy 插入这个表,然后使用一个 sql 语句复制到主表 - 最大限度地减少主表上的任何锁定时间。

    大多数等待时间现在仍在网络 IO 上。似乎我遇到了 VM 明智的问题。将在接下来的几个月内转向物理硬件;)

    最佳答案

    如果您每秒管理 70k 行,那么到目前为止您非常幸运。但我怀疑这是因为您有一个非常简单的架构。

    我不敢相信你问这种负荷

  • 虚拟服务器
  • 单阵列
  • SATA硬盘

  • 网络和 CPU 共享,IO 受限:您不能使用所有资源。
    您看到的任何负载统计数据都不是很有用。我怀疑您看到的网络负载是 2 个虚拟服务器之间的流量,如果您解决此问题,您将受到 IO 限制

    在我继续之前,请阅读此 10 lessons from 35K tps .他没有使用虚拟盒子。

    这就是我要做的,如果您想增加卷,则假设没有 SAN 和 DR 功能。
  • 购买 2 台大型物理服务器,CPU RAM 无关紧要,最大 RAM,转到 x64 安装
  • 磁盘 + Controller = 最快的主轴,最快的 SCSI。或者一个很棒的 NAS
  • 1000MB + NIC
  • 带有 6-10 个磁盘的 RAID 10 的日志文件仅您的数据库
  • 数据文件的剩余磁盘 RAID 5 或 RAID 10

  • 作为引用,我们的峰值负载是每小时 1200 万行(16 核、16GB、SAN、x64),但我们的负载很复杂。我们没有能力。

    关于sql-server-2008 - 从 .NET 代码插入 SQL Server 表的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4747126/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com