我已创建了80000条记录与一个表Cluster Index上的CustomerID列。当我查询以下语句时,执行计划的行为有所不同。任何人都可以澄清相同。
select * from customer
Run Code Online (Sandbox Code Playgroud)
显示集群索引扫描,所以这是正确的。
select * from customer where CustomerID=80000
Run Code Online (Sandbox Code Playgroud)
执行计划显示 ClusterIndex Seek,所以这是正确的。
select * from customer where CustomerID between 1 and 70000
Run Code Online (Sandbox Code Playgroud)
执行计划仍然显示ClusterIndex 求问为什么?
根据统计,行数为 90%,然后优化器必须使用“ClusterIndex Scan”,但它使用的是“Cluster Index Seek”,为什么?所有统计数据都是最新的,我已经检查了估计行和实际行,那么为什么优化器选择“集群索引搜索”来获取总记录中 90% 的行。
我看到 SQL Server 中的默认系统健康会话事件是 5 MB,每个事件总共有 4 个文件。
我们正在尝试从历史事件中的系统健康状况中获取数据,但对于一些关键的生产服务器,它们只会非常快速地滚动。对有些人来说,他们甚至在那里呆了几个星期
SQL Server 中滚动文件的机制是如何工作的,有没有一种方法可以检查这种情况何时以及如何发生?
编辑@每个答案
因此,我认为系统运行状况中可能会捕获很多不需要的事件。我怎样才能在这个系统运行状况中找到它们并过滤掉它们?
另外,我们应该增加文件大小,比如 200 MB 4 文件,还是只保留 10 MB 80 文件等小文件?哪一个更好?
更新@我已经将此标记为答案,但是在检查弹出的另一件事时:
文件未按顺序填写;假设我将 10 个文件增加到每个 10 MB。我们看到几天前的 1-6 个文件似乎都充满了 10 MB,而同一天的文件 7 和 8 是 2 MB,而文件 9 和 10 完全充满了 10 MB。我想这是意料之中的,只是好奇为什么会这样?
我有一个FTS Catalog包含 ~10 6行的表。它曾经像魅力一样工作,但最近,由于未知原因,它开始随机出现非常糟糕的(查询> 30 秒)性能。
全文索引维护的阅读指南我仔细研究sys.fulltext_index_fragments并注意到以下几点:
这个波动的片段数量会干扰 SQL Server 的执行计划选择吗?
我能做些什么来清理这个?
performance sql-server optimization full-text-search sql-server-2014 query-performance
最近我们有一个超过 1 TB 的审计数据库,由于我们有存储问题,管理层正在寻找选择。
我的建议是在每年年底我们进行备份并截断所有表,以保持数据库的可管理性。
拥有存档数据库不会有好处,因为它会再次消耗相同的空间。
我想对我可以向管理层提出的选项提出专家意见,即每年分配更多空间或截断整个数据库。
使用 SQL Server 2014。
给定带有rowversion列的表,要加入的其他表和这样的选择:
CREATE TABLE dbo.FooTable(
[Id] [int] IDENTITY(1,1) NOT NULL,
[RowVersion] [rowversion] NULL,
CONSTRAINT [PK_FooTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
))
CREATE TABLE dbo.BarTable(
[Id] [int] IDENTITY(1,1) NOT NULL
CONSTRAINT [PK_BarTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
))
Insert into BarTable default values
GO
SELECT *
FROM FooTable ft
FULL OUTER JOIN BarTable bt on ft.Id = Bt.Id
Run Code Online (Sandbox Code Playgroud)
选择的结果是:
Id RowVersion Id
NULL 0x 1
Run Code Online (Sandbox Code Playgroud)
如果与 BarTable 不匹配,则RowVersion 列不是 null,而是 0x。
这让我们用来在应用服务器上反序列化结果的 …
有一个较旧但较大的数据库(在 san 上为 6tb),其页面验证选项仍设置为 TORN_PAGE_DETECTION。将页面验证更改为校验和模式时,如何将新的校验和应用于所有现有页面?对页面验证模式进行此更改时是否有任何需要注意的大开销?这是否需要在较长的维护窗口期间完成?
SQL 2014 当前数据库兼容级别 = 120
我需要深入研究具有类似于此架构的日志表:
CREATE TABLE t (
id int PRIMARY KEY,
data varchar(max)
);
Run Code Online (Sandbox Code Playgroud)
列data以这种格式存储从 Web 服务接收的 XML 文本:
这是缩小版
<?xml version="1.0" encoding="UTF-8"?>
<PARAM>
<TAB DIM="30" ID="ZC3D2_1" SIZE="5">
<LIN NUM = "1">
<FLD NAME = "ZDOC" TYPE = "Char">Ferran López</FLD>
</LIN>
</TAB>
</PARAM>
Run Code Online (Sandbox Code Playgroud)
当我尝试将此文本转换为 XML 时,出现下一个错误:
XML 解析:第 xx 行,字符 48,非法 xml 字符
可以通过删除<xml>标记或至少删除encoding属性来解决。
注意:如果没有像 那样的特殊字符
ó,即使我不删除<xml>标签,它也能正常工作。
题
有没有办法在不替换或删除<xml>标签的情况下将其转换为 XML ?
CAST(REPLACE(data, 'encoding="UTF-8"', '') as XML)
Run Code Online (Sandbox Code Playgroud)
db<>在这里摆弄
更新
服务器整理是: …
我正在运行生产数据库,通常每分钟有 50-100 个插入。我正在尝试使用以下方法在生产数据库中添加一个新列,
ALTER TABLE MyDB ADD [MyColumn] varchar(30)
GO
Run Code Online (Sandbox Code Playgroud)
这个查询一直在运行,直到我停止它才完成。我还能做什么?
我最近继承了一个 MSSQL 数据库,因为我们的 DBA 已经转向更美好的领域。我不是 DBA,只有中等的 SQL 知识,但不得不承担他的一些职责,并且遇到了一个问题,我在导航时遇到了一些麻烦。
我们遇到了一个问题,即通过 Excel 访问数据库的用户往往会导致数据库操作停止,这会影响我们的 ERP 软件。我们当前的解决方法是查看 SSMS 中的活动监视器并终止有问题的 Microsoft Office 应用程序。
我希望有一个每隔几分钟运行一次的脚本化任务,以保持事情顺利进行,并且当系统出现故障时,用户不会涌向 IT。
我发现以下查询将允许我提取锁定类型和其他有用的数据(例如等待时间),但不能提取活动监视器中找到的特定应用程序。
select * from sys.dm_exec_requests where wait_type = 'LCK_M_S'
理想情况下,此代码将找到 wait_type 为 LCK_M_S 的应用程序 Microsoft Office,并终止等待时间最长的任务,并在一天中根据需要重复。
预先感谢您的回复。
我们正在运行 2014 年的 SQL Server。在过去的几年里,服务器每 2-7 天就会无缘无故地生成一次内存转储,锁定大多数进程,并迫使我们重新启动 SQL 服务才能使其运行。
这是错误文件的片段:
Exception Address = 00007FFAD7FCBAA2 Module(combase+000000000003BAA2)
Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION
Access Violation occurred reading address 00000000D8063158
Input Buffer 74 bytes -
Run Code Online (Sandbox Code Playgroud)
还有什么我们应该探索的吗?
或者让 Microsoft 分析.MDMP文件是我们唯一的选择吗?
需要提及的要点:
我们已将其修补到最新的服务包,以及最新的累积和 GDR 更新。没有改变
Microsoft SQL Server 2014 (SP3-CU4-GDR) (KB5014164) - 12.0.6439.10 (X64)
Run Code Online (Sandbox Code Playgroud)
没有与这些内存转储发生时间相关的特定 SQL 语句/存储过程。
SQL 数据库文件在与操作系统不同的硬盘上运行。它是一个 1TB 驱动器,在任何给定时间都有 250GB 可用空间。
该计算机是 Windows Server 2012 R2 虚拟机
CHKDSK在操作系统和数据驱动器上未发现任何错误。
DBCC 检查顺利通过。
OPENQUERY&OPENROWSET功能使用相当频繁,使用最新的ACE&ODBC驱动程序。
如果我查询 sys.dm_server_memory_dumps,这是按日期排列的记录计数:
creation_time …Run Code Online (Sandbox Code Playgroud)sql-server-2014 ×10
sql-server ×9
archive ×1
cast ×1
checksum ×1
corruption ×1
dump ×1
excel ×1
index ×1
join ×1
optimization ×1
performance ×1
vldb ×1
wait-types ×1
xml ×1