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

wangnaisheng 辽宁科技大学 信息系统项目管理师  2016-08-16 11:32:08
数据库中的一个表,对该表进行过页压缩(一共8000万多条数据),每天有差不多20万数据插入,在压缩前插入的使用SqlBulkCopy批量插入的时候几分钟完事,压缩后使用SqlBulkCopy批量插入的时候都过1个小时了,求问大神这是什么原因?
...全文
427 点赞 收藏 9
写回复
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 资源多
我想问下,如果我想把这个压缩的恢复压缩之前的状态(也就是未压缩),能恢复吗?
回复 点赞
发动态
发帖子
疑难问题
创建于2007-09-28

9307

社区成员

12.1w+

社区内容

MS-SQL Server 疑难问题
社区公告
暂无公告