我们的数据库由许多表组成,其中大多数使用整数代理键作为主键。这些主键中约有一半位于标识列上。
数据库开发始于 SQL Server 6.0。
从一开始就遵循的规则之一是,避免根据递增键创建聚集索引,正如您在这些索引优化技巧中找到的那样。
现在使用 SQL Server 2005 和 SQL Server 2008,我强烈的印象是情况发生了变化。同时,这些主键列是表的聚集索引的完美首选。
一般设置并行性的最佳实践是什么?我知道 SQL Server 默认0
使用所有可用的处理器,但是在什么情况下您要更改此默认行为?
我记得在某处读到过(我必须寻找这篇文章),对于 OLTP 工作负载,您应该关闭并行性(将 maxdop 设置为1
)。我不认为我完全理解你为什么要这样做。
您什么时候将 maxdop 保持到 SQL Server (0)?您何时会关闭并行性 (1)?您何时会明确说明特定数量的处理器的 maxdop?
什么导致并行?
我目前遇到错误(通过 traceID 1222 记录):
keylock hobtid= 8205698989 objectname=mydb.dbo.Orders indexname = _dta_Index_Orders_5_120345_K1_K2_7_1 id=lock43fe181 mode=S AssociatedObjectID = 8205698989
waiterID = process 85b2566 mode=S requestType=wait
waiter-list
keylock hobtid= 820562208 objectname=mydb.dbo.Orders indexname = pk_Orders_OrderID id=lock4012341 mode=X AssociatedObjectID = 820562208
resource-list
Update Orders set OrderType = 1 where OrderID = 52000 and DeliveryID = 1236
inputbuf
Update [Orders] set [OrderType] = @1 where [OrderID] = @2 and [DeliveryID] = @3
Run Code Online (Sandbox Code Playgroud)
桌子:
Orders
Run Code Online (Sandbox Code Playgroud)
列:
OrderID int (pk)
OrderNumber Varchar(50)
OrderDate datetime
OrderType int
DeliveryID int
DateDelivered …
Run Code Online (Sandbox Code Playgroud)