AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 5025
Accepted
Mark Storey-Smith
Mark Storey-Smith
Asked: 2011-08-26 05:33:48 +0800 CST2011-08-26 05:33:48 +0800 CST 2011-08-26 05:33:48 +0800 CST

优化 BLOB 数据的 BCP 性能

  • 772

我正在计划将 2TB 数据库实时迁移到分区表。该系统从广义上讲是一个文档存储,大部分空间分配给 50kb 到 500kb 之间的 LOB,一小部分在 500kb 到 1MB 范围内。部分迁移将涉及从旧数据库到新数据库的 BCPing 数据。

BCP 是首选方法,因为数据中的当前/历史划分允许在最终切换之前分阶段(在较安静的时期)提取较旧的数据,从而最大限度地减少对实时系统的影响。数据量和存储的可用性排除了对分区方案的就地重建。

由于 BLOB 内容,我怀疑通过尝试 KILOBYTES_PER_BATCH 而不是 ROWS_PER_BATCH 可能会获得一些性能提升。BCP 文档中建议SQL 可以基于此值优化操作。

我找不到关于这些优化的性质或从哪里开始测试的任何指导。在没有建议的情况下,我将在 4/8/16/32/64mb 边界处尝试短跑开始。

更改数据包大小(BCP -a 参数,而不是服务器级别设置)可能会带来一些好处,但除非有人有更公式化的方法,否则我倾向于将其提高到最大值 65535。

sql-server performance
  • 1 1 个回答
  • 5661 Views

1 个回答

  • Voted
  1. Best Answer
    Marian
    2011-08-27T00:40:13+08:002011-08-27T00:40:13+08:00

    这不是对您的问题的直接回答,但有些文章您会从阅读它们中受益(以防您没有先找到它们:-))。它们是关于使用 bcp/批量复制加载大量数据。我已经阅读了所有内容,但没有找到任何关于 KILOBYTES_PER_BATCH 的详细信息,它们都在使用 ROWS_PER_BATCH,但我相信您会找到其他有用的信息。

    • 在不到 1 小时内加载 1TB(来自 SQL CAT 团队) - 来自此处的建议列表(引用):

    • 运行与可用 CPU 一样多的加载进程。如果您有 32 个 CPU,请运行 32 个并行加载。如果您有 8 个 CPU,请运行 8 个并行加载。

    • 如果您可以控制输入文件的创建,请将它们的大小设置为可以被您要并行运行的加载线程数整除。如果要使用切换分区策略,还要确保所有记录都属于一个分区。

    • 如果您在 SQL Server 计算机上运行进程,请使用 BULK insert 而不是 BCP。

    • 使用表分区可以再增加 8-10%,但前提是您的输入文件必须保证与您的分区功能相匹配,这意味着一个文件中的所有记录必须位于同一个分区中。

    • 使用 TABLOCK 避免一次锁定行。

    • 如果要将多个流导入一个表,请使用 ROWS PER BATCH = 2500 或接近此值的值。

    • 构建大型关系数据仓库的 10 大最佳实践(来自 SQL CAT 团队)- 建议(引用):

    • 在初始数据加载期间使用 SIMPLE 或 BULK LOGGED 恢复模式。

    • 使用聚集索引创建分区事实表。

    • 为每个分区创建非索引临时表,并为填充每个分区单独的源数据文件。

    • 并行填充临时表(使用多个 BULK INSERT、BCP 或 SSIS 任务)

    • 在每个临时表上构建一个聚集索引,然后创建适当的 CHECK 约束。

    • 将所有分区 SWITCH 到分区表中。

    • 在分区表上构建非聚集索引。

    • 数据加载性能指南(来自 SQL CAT 团队)

    • 将批量数据加载到分区表中 - SQL Server 最佳实践文章(Technet 文章)

    • SQL Server 2000 增量批量加载案例研究(Technet 文章)

    • 大型快速通道 POC 的经验教训和发现(来自 SQL CAT 团队)

    • SQL Server BCP 的性能调优技巧(作者 Brad McGehee)

    • 性能影响:寻找最佳批量大小(作者:Linchi Shea)

    以及明显的 MSDN 参考资料:

    • 批量导入管理批次
    • 管理批量复制批量大小
    • 大容量复制性能注意事项
    • 优化批量导入的指南
    • 优化批量导入性能

    以我个人的经验,我成功地使用并行加载和几个批量大小的测试来实现快速数据加载。我想只有个人测试适合你。希望您能在参考资料中找到一些好的建议。

    • 13

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve