在生产 SQL 服务器上,我看到数据流量出现间歇性的巨大峰值。高达 200Mbit/s,这会导致 NETWORK IO 等待,从而导致查询超时。如何找出返回大结果集的查询?
我正在尝试为 SQL Server 2008 数据库创建一些索引,但收到以下错误消息。
消息 8606,级别 17,状态 1,第 1 行 此索引操作每个 DOP 需要 1024 KB 内存。DOP 为 2 的 2048 KB 总需求大于为高级服务器配置选项“索引创建内存 (KB)”设置的 sp_configure 值 704 KB。增加此设置或减少 DOP 并重新运行查询。
目前,索引创建内存设置为 794KB,每个查询的最小内存设置为 1024KB。更改这些值会产生什么影响?尤其是在性能方面。我应该更改它们,创建索引并将它们更改回来还是应该将其设置为 0?
我有一个可容纳 100.000 名玩家的高分表,每天插入 2 次,每个玩家一条记录。在一天结束时,该表中索引的索引碎片为 99%。有没有办法通过调整设置来防止这种情况?
CREATE TABLE HighScore(
[id] [int] IDENTITY(1,1) NOT NULL,
[user] [int] NULL,
[player] [int] NULL,
[round] [tinyint] NULL,
[group] [int] NULL,
[rank] [int] NULL,
[delta] [int] NULL,
[roundpoints] [int] NULL,
[totalpoints] [int] NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [HighScore_RoundGroup_Nidx] ON .[HighScore]
(
[round] ASC,
[group] ASC
)WITH …
Run Code Online (Sandbox Code Playgroud) 为了诊断一些性能问题,我想更好地了解与系统性能相比调用某些过程的次数。有没有办法获得在特定时间跨度内每个过程被调用的次数?
我有一个类似的查询
SELECT COUNT(*) FROM Foo Where Bar = 1 AND Baz = 2
Run Code Online (Sandbox Code Playgroud)
该表有12934600条记录,其中1000001 条匹配该谓词
查看我看到的查询统计信息
(受影响的 1 行)表 'Foo'。扫描计数 1,逻辑读取1863 次,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
(1 行受影响)
SQL Server 执行时间:CPU 时间 = 250 毫秒,已用时间 = 503 毫秒。
纵观查询计划80%的时间是在花了索引查找的酒吧和巴兹列和20%上聚集的结果。
有没有办法加快这个速度,如果有的话如何?我还想了解哪些硬件组件对 CPU 或磁盘 IO 或总线速度有很大影响。
我有一个用于生成 SOAP 文档的 TSQL 查询。我正在使用两个命名空间。即: - http://schemas.xmlsoap.org/soap/envelope/用于“打包”soap 文档 - 描述正文中包含的数据的自定义文档
目前,包括正文中的元素在内的每个元素都包含我不需要且想要的soapnamespace 引用,我只希望它位于根元素中。
所以我的 XML 现在看起来像
<soapenv:Envelope xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar">
<soapenv:Header xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar" />
<soapenv:Body xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar">
<pas:SomeObject xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar">
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像
<soapenv:Envelope xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar">
<soapenv:Header/>
<soapenv:Body>
<pas:SomeObject>
Run Code Online (Sandbox Code Playgroud)
在我当前使用的查询中
;WITH XMLNAMESPACES ( 'http://foobar' as pas,
'http://schemas.xmlsoap.org/soap/envelope/' as soapenv
)
SELECT (SELECT '' FOR XML PATH('soapenv:Header'),type ),
etc...
FOR XML PATH('soapenv:Envelope'), ELEMENTS
Run Code Online (Sandbox Code Playgroud) 我正在运行一些性能测试,我从 900.000 条记录的数据集开始,更新需要 10 秒或每秒大约 90000 条记录。然后我将记录数增加到 9.000.000,更新耗时 170 秒或每秒更新约 52941 条记录。
为什么当记录总数增加时每秒更新的记录数会下降?
数据中的分布是一样的,较大的集合是复制10次的较小的集合。自从我复制了 10 次数据以来,数据和日志文件的大小确实增加了。在那之后我确实缩小了日志文件。此时数据库服务器上没有其他工作负载。
执行更新的存储过程如下:
CREATE PROCEDURE updatePoints
@ids NVARCHAR(MAX)
AS
DECLARE @points1 INT
DECLARE @points2 INT
SET @points1 = 1
SET @points2 = 2
UPDATE p
SET points = (0 + CASE WHEN p.[x] = m.[x] AND p.[y] = m.[y]
THEN @points1
ELSE 0
END +
CASE WHEN p.[u] = m.[u] AND p.[v] = m.[v]
THEN @points2
ELSE 0
END)
FROM p
JOIN m ON m.id = …
Run Code Online (Sandbox Code Playgroud)