sql-server - 提高 SQL Server 插入大数据的性能
问题描述
我正在将大约 10 亿条记录插入到 SQL Server 表中。这个过程很漫长,我正在努力改进它。
因此我做了这些:
- 从插入的表中删除所有索引和主键
- 在插入之前删除了所有选择/更新检查
- 检查 SQL Server 内存最大值,它似乎已经足够大了
我想知道限制日志文件大小是否有助于提高 SQL Server 性能?如果是这样,我该怎么做?
我还能做些什么来改进插入过程吗?
编辑
SQL Server 版本:15.0.2000.5
通过 .Net 应用程序加载数据,我在其中处理数据并将其发送到仅具有插入语句的存储过程(都在同一台 PC 上,没有网络,即 SQL 服务器和 .Net 应用程序都在同一台机器上)
目前在 50 分钟内插入了大约 2000 万条记录
恢复模式 = 完全
我删除了所有集群和非集群索引
解决方案
我当时插入了 1 条记录。
这不会是超快的。在每个命令中向 SQL Server 发送多行。最快的方法通常是SqlBulkCopy,您可能不需要并行执行任何操作。同样使用表值参数或 JSON 一次发送多行都比你正在做的要快得多。
我正在做的是读取 XML 然后将其插入 1
您可以将整个 XML 文档发送到 SQL Server 并使用 xml nodes()或openxml将其切碎。或者,您可以使用 XMLReader 并将行通过管道传输到 SqlBulkCopy,方法是实现从 XML 流中读取的自定义 IDataReader。
推荐阅读
- matlab - 如何从 Simulnik Thermal House 示例中加载数据?
- django - 不使用模板仅使用视图文件将数据发布到数据库中
- java - 本地存储库中存在依赖关系,但远程存储库中的 Maven 搜索
- python - 是否有一个 python (3) 本机等效于使用 rlwrap 调用脚本?
- excel - 从过滤范围复制单元格,其中只有一行
- ejb - 在 @Stateful 的情况下,EJB 容器如何区分一个客户端和另一个客户端
- html - 如何为html中的特定行实现滚动条
- html - Angular - 仅在值匹配时修补选择下拉列表中的选定值
- html - 隐藏/删除 DIV 中的特定文本
- php - 通过 htacess 从 Codeigniter 中的 URL 中删除主文件夹名称