mbm*_*ter 8 sql sql-server azure
我在Sql Azure中有一个表包含大约6M行.我想为它创建一个新索引.cmd就像:
CREATE NONCLUSTERED INDEX [INDEX1] ON [dbo].Table1
(
[Column1] ASC,
[Column2] ASC,
[Column3] ASC,
[Column4] ASC
)
INCLUDE ( [Column5],[Column6])
Run Code Online (Sandbox Code Playgroud)
大约15分钟后,发生错误
"Msg 10054,Level 20,State 0,Line 0
从服务器接收结果时发生传输级错误.(提供者:TCP提供者,错误:0 - 远程主机强行关闭现有连接.)"
我试了好几次,得到了同样的错误.但我已经执行了其他耗时的查询,例如:
插入table1(Col1,Col2,Col3),从table2中选择Col1,Col2,Col3
花了20分钟并成功返回.
查询在同一个Sql Azure DB中执行.我不知道这里发生了什么.有人可以帮忙吗?谢谢!
我在包含100M行的表中遇到了同样的问题并联系了Microsoft支持.这是我得到的答复:
您无法在表上创建索引的原因是您面临平台上的限制,该限制阻止事务大于2GB.
索引的创建是一种事务操作,它依赖于事务日志来执行表页的移动.表中的更多行意味着要在T-Log中放入更多页面.由于您的表包含1亿条记录(这是一个非常大的数字),因此您很容易达到此限制.
为了创建索引,我们需要改变方法.基本上,当您在源表上创建索引时,我们将使用临时(临时)表来存储数据,这是您之前从数据中清除的.
行动计划:
- 创建与原始表相同但没有任何索引的登台表(这使登台表成为堆)
- 将数据从原始表移动到临时表(插入更快,因为登台表是堆)
- 清空原始表
- 在原始表上创建索引(这次事务应该几乎为空)
- 将数据从登台表移回原始表(这需要一些时间,因为表包含索引)
- 删除登台表
他们建议使用BCP在登台表和原始表之间移动数据.
查看event_log表时...
select * from sys.event_log
where database_name ='<DBName>'
and event_type <> 'connection_successful'
order by start_time desc
Run Code Online (Sandbox Code Playgroud)
..我发现此错误消息:
由于过多的事务日志空间使用,会话已终止.尝试在单个事务中修改较少的行.
归档时间: |
|
查看次数: |
1650 次 |
最近记录: |