数据库中的一个表,对该表进行过页压缩后,批量插入数据很耗时?

wangnaisheng 2016-08-16 11:32:08
数据库中的一个表,对该表进行过页压缩(一共8000万多条数据),每天有差不多20万数据插入,在压缩前插入的使用SqlBulkCopy批量插入的时候几分钟完事,压缩后使用SqlBulkCopy批量插入的时候都过1个小时了,求问大神这是什么原因?
...全文
525 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangnaisheng 2016-08-17
  • 打赏
  • 举报
回复
引用 8 楼 wmxcn2000 的回复:
你张表上有 clustered 索引(主键)吗? 检查一下新写入的数据,是否会让大量数据移动?
聚集索引、非聚集索引 都有的。 写入的数据,是否会让大量数据移动?怎么看?
中国风 2016-08-16
  • 打赏
  • 举报
回复
你查看到一下系统资源是否在导入时CPU居高不下,如果是以上可能是主要原因 在与应用程序交换数据时,在数据库服务器上需要额外的 CPU 资源来压缩和解压缩数据
中国风 2016-08-16
  • 打赏
  • 举报
回复
大容量导入操作 导入数据时,如果已对目标表启用压缩,则存储引擎会将数据转换为压缩的行格式。 这样所使用的 CPU 资源会比将数据导入未压缩表时使用的 CPU 资源多
卖水果的net 2016-08-16
  • 打赏
  • 举报
回复
你张表上有 clustered 索引(主键)吗? 检查一下新写入的数据,是否会让大量数据移动?
中国风 2016-08-16
  • 打赏
  • 举报
回复
看一下索引碎片 通常这类表批量导数据,都用堆,不建索引
wangnaisheng 2016-08-16
  • 打赏
  • 举报
回复
引用 5 楼 roy_88 的回复:
对,重新生成整个表取消压缩选项
我以同样的表结构重新建立一个一样的表(没有压缩),插入20w数据不到2分钟; 我用同样的表结构(压缩过),里面有1000w的数据,插入20w数据也是很快; 所以我没明白是为什么? 还有其他原因吗?
中国风 2016-08-16
  • 打赏
  • 举报
回复
对,重新生成整个表取消压缩选项
wangnaisheng 2016-08-16
  • 打赏
  • 举报
回复
引用 3 楼 wangnaisheng 的回复:
[quote=引用 1 楼 roy_88 的回复:] 大容量导入操作 导入数据时,如果已对目标表启用压缩,则存储引擎会将数据转换为压缩的行格式。 这样所使用的 CPU 资源会比将数据导入未压缩表时使用的 CPU 资源多
我想问下,如果我想把这个压缩的恢复压缩之前的状态(也就是未压缩),能恢复吗?[/quote] 使用去除压缩 ALTER TABLE 表名 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = NONE --去除压缩选项 )
wangnaisheng 2016-08-16
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
大容量导入操作 导入数据时,如果已对目标表启用压缩,则存储引擎会将数据转换为压缩的行格式。 这样所使用的 CPU 资源会比将数据导入未压缩表时使用的 CPU 资源多
我想问下,如果我想把这个压缩的恢复压缩之前的状态(也就是未压缩),能恢复吗?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧