我的任务是识别生产服务器上发生的任何阻塞。我实现这一目标的计划是使用
EXECUTE sp_configure 'blocked process threshold', 5
Run Code Online (Sandbox Code Playgroud)
结合服务器端跟踪来收集阻塞进程报告。
我知道这项活动会影响性能,我想找到某种方法来量化这将是什么。
我们使用 ASPState 数据库在 SQL Server 2005 群集上保留 .NET 会话状态。我们在高峰期看到一些奇怪的行为
DeleteExpiredSessions 过程通过代理作业每分钟运行一次。有时这项工作需要花费几分钟来运行和删除过期的会话
从应用程序到 ASPState 数据库的请求非常缓慢。我相信这是因为 DeleteExpiredSessions 过程在表上持有排他锁
代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[DeleteExpiredSessions]
AS
SET NOCOUNT ON
SET DEADLOCK_PRIORITY LOW
DECLARE @now datetime
SET @now = GETUTCDATE()
DECLARE @tblExpiredSessions TABLE
(
SessionID nvarchar(88) NOT NULL PRIMARY KEY
)
INSERT INTO @tblExpiredSessions (SessionID)
SELECT SessionID
FROM [ASPState].dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
WHERE Expires < @now
--EXPIRED SESSION LOGGING
/*
DECLARE @ExpiredSessionCount Int;
SELECT @ExpiredSessionCount = COUNT(SessionID)
FROM @tblExpiredSessions; …Run Code Online (Sandbox Code Playgroud) 我正在使用 T-SQL 自动重建和重新组织索引。我遇到了无法在线重建的索引问题。发生这种情况主要是因为包含 ntext/nvarchar 列。
有没有办法以编程方式将它们标识为该语句的一部分?对 WHERE 谓词的补充
SELECT
--TOP 20
OBJECT_NAME(IPS.OBJECT_ID) AS [TableName], avg_fragmentation_in_percent, SI.name [IndexName],
schema_name(ST.schema_id) AS [SchemaName], 0 AS IsProcessed
INTO #FramentedTableList
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL , NULL) IPS
JOIN sys.tables ST WITH (nolock) ON IPS.OBJECT_ID = ST.OBJECT_ID
JOIN sys.indexes SI WITH (nolock) ON IPS.OBJECT_ID = SI.OBJECT_ID AND IPS.index_id = SI.index_id
WHERE ST.is_ms_shipped = 0 AND SI.name IS NOT NULL
AND avg_fragmentation_in_percent >= CONVERT(DECIMAL, @FragmentationThresholdForReorganizeTableLowerLimit)
ORDER BY avg_fragmentation_in_percent DESC
Run Code Online (Sandbox Code Playgroud) 我正在寻找复制快照超过我们预测的 5 倍的解释
复制失败后,我们尝试使用新快照重新初始化订阅。数据库大小为135GB,数据库中的一张表为60GB - 我们已将本文从出版物中排除。这意味着我们期望快照大小约为 75GB。
我们曾多次尝试创建快照,但由于磁盘空间不足而失败。昨晚快照用 340GB 的可用空间填充了磁盘。
我欢迎对这个巨大的快照大小的任何解释。
在检查可能的原因时,我注意到快照格式设置为“字符 - 如果发布者或订阅者未运行 SQL Server,则为必需”。尽管事实上这种跨国复制的两端都是本机 SQL Server。格式之间有大小不同吗?
提前致谢。
Native mode file Size:105 MB
C:>bcp IVM_ArchiveTest.dbo.Event out D:\NOBACKUP\UseOnce\EventNative.dat -T -n
218977 rows copied. Network packet size (bytes): 4096 Clock Time (ms.)
Total : 7878 Average : (27796.01 rows per sec.)
Character mode file Size:66 MB
C:\>bcp IVM_ArchiveTest.dbo.Event out D:\NOBACKUP\UseOnce\EventChar.dat -T -c
218977 rows copied. Network packet size (bytes): 4096 Clock Time (ms.)
Total : 1654 Average : (132392.38 rows per …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个有效的查询来删除数据块。为此,我希望通过使用主键来获取最旧的记录来避免索引扫描。但是,我看到返回了一些意想不到的结果。
我希望这个
SELECT TOP 15 OrderID FROM [Order]
Run Code Online (Sandbox Code Playgroud)
会给我最旧的 15 条记录,因为我可以依靠主键递增,因此表中的存储顺序将从低到高。
但是,这会返回不同的结果集
SELECT TOP 15 OrderID FROM [Order] ORDER BY DateCreated ASC
Run Code Online (Sandbox Code Playgroud)
这似乎是获得我需要的结果的更准确但更昂贵的方式。
令人费解的是,这
SELECT TOP 15 * FROM [Order]
Run Code Online (Sandbox Code Playgroud)
为此提供一组不同的 OrderID (PK)
SELECT TOP 15 OrderID FROM [Order]
Run Code Online (Sandbox Code Playgroud)
我知道http://msdn.microsoft.com/en-gb/library/ms189463.aspx解释说没有 ORDER BY 子句就不能保证订单,但期望 PK 为我订购并且无法解释两者之间的差异最后两个选择子句。
我有一个应用程序由于超时而关闭。在这些时间里,我们看到保存 ASP 会话状态的数据库的响应时间大幅增加。
为了诊断问题,我使用SP_CONFIGURE'blocked process threshold',15并运行跟踪以捕获任何触发的事件。在下一个事件期间,跟踪捕获会话状态数据库中的一些阻塞事件。
我已经确定了主要拦截器,可以看到它已暂停并等待。
<blocked-process-report>
<blocked-process>
<process id="process53fb4c8"
taskpriority="0" logused="0"
waitresource="KEY: 10:72057594039238656 (594b17b7493c)" waittime="20631"
ownerId="9710782702" transactionname="UPDATE"
lasttranstarted="2013-06-27T17:29:38.130" XDES="0xc429df950" lockMode="U"
schedulerid="14" kpid="6912" status="suspended" spid="359" sbid="0" ecid="0"
priority="0" trancount="2" lastbatchstarted="2013-06-27T17:29:38.130"
lastbatchcompleted="2013-06-27T17:29:38.107"
clientapp=".Net SqlClient Data Provider" hostname="WEB03" hostpid="7520"
loginname="State" isolationlevel="read committed (2)" xactid="9710782702"
currentdb="10" lockTimeout="4294967295"
clientoption1="536870944" clientoption2="128056">
<executionStack>
<frame line="18" stmtstart="1114" stmtend="4494"
sqlhandle="0x03000a00210f020741a1be0058a000000100000000000000"/>
</executionStack>
<inputbuf>
Proc [Database Id = 10 Object Id = 117575457]
</inputbuf>
</process>
</blocked-process>
<blocking-process>
<process status="suspended" waittime="1046" spid="217" sbid="0" ecid="0"
priority="0" trancount="1" lastbatchstarted="2013-06-27T17:29:29.113"
lastbatchcompleted="2013-06-27T17:29:29.010" …Run Code Online (Sandbox Code Playgroud) sql-server ×6
locking ×3
session ×2
t-sql ×2
index ×1
performance ×1
profiler ×1
replication ×1
snapshot ×1
top ×1