MoS*_*Slo 6 indexing sql-server-2000
我已经负责一个有10年历史的事务系统,其中大多数业务逻辑是在数据库级别实现的(触发器,存储过程等).Win2000服务器,MSSQL 2000企业版.目前没有考虑更换或更新系统的直接计划.
核心进程是一个执行事务的程序 - 具体来说,它执行具有各种参数的存储过程; 我们称之为sp_ProcessTrans.程序以异步间隔执行存储过程.
事情本身很好,但是在远程工作站上有30个这个程序的实例,所有这些实例都异步执行sp_ProcessTrans,然后从SQL服务器检索数据.执行非常规则 - 每分钟0到60次,具体取决于程序实例负责的项目.
随着10年的数据增长,系统性能大幅下降:原因是Employee桌面上的死锁,特别是死锁等待时间.
我发现:
sp_ProcessTrans执行中,它从Employee表中选择7次因此死锁的原因很明显.我创建了该领域的非唯一有序聚集索引(几乎是唯一的,NUM(7),很少改变).测试环境立即得到改善.问题是我无法模拟测试环境中的死锁.我需要30个工作站,我需要在这些工作站上模拟"现实"活动,因此可视化已经完成.
我需要知道是否必须安排停机时间.创建索引不应该是MSSQL的危险操作,但是在事务仍在进行时,在生产数据库上创建此字段索引是否存在任何危险(数据损坏,额外等待时间等)?我可以通过30个站选择交易相当安静的时间.
我没有看到任何隐藏的危险吗?(如果出现问题,我不期待恢复数据库.使用10年的数据需要花费很多时间.)
数据损坏不应该成为问题,但如果您尝试将索引添加到实时生产表中,您可能会遇到问题,因为表在索引创建期间不会响应查询。创建索引将应用独占表锁直到完成,所需的时间取决于许多因素(尤其是行数)。
强烈建议安排停机时间,这也是一个值得养成的好习惯。显然,已经采取了备份,并制定了计划,以防万一您必须撤消您的意图。