标签: sql-server

dm_db_index_operational_stats 显示比扩展事件报告更多的阻塞

我已经实现了 XE 来捕获我的实例上的阻塞(根据这篇很棒的文章https://www.brentozar.com/archive/2014/03/extended-events-doesnt-hard/#comment-2470072。)

我这样做是因为我一直关注阻塞状态,使用查询的这种美:

select 
   db_name(database_id) DB, 
   object_name(object_id) Obj, 
   row_lock_count + page_lock_count No_Of_Locks, 
   row_lock_wait_count + page_lock_wait_count No_Of_Blocks, 
   row_lock_wait_in_ms + page_lock_wait_in_ms Block_Wait_Time_in_ms, 
   index_id
from 
   sys.dm_db_index_operational_stats(NULL,NULL,NULL,NULL) 
order by 
   Block_Wait_Time_in_ms desc
Run Code Online (Sandbox Code Playgroud)

偶尔会在文件中记录一些阻塞,但没有我预期的那么多。我的期望是查询中 No_Of_blocks 中的数字将与根据 XE 记录到文件中的块数相对应。

与查询相比,XE 是否可能无法捕获任何内容?有任何想法吗?感谢您的反馈意见!

sql-server extended-events blocking

2
推荐指数
1
解决办法
215
查看次数

使用第三方 VSS 备份加上本机 SQL 备份

我有一个 SQL 数据库服务器,它使用R1Soft 备份备份每 24 小时在 02:00 进行一次服务器备份。这是一个完整的文件系统备份(裸机加上每日差异,因此包括操作系统等)。

我想增加一些数据库的备份频率,以便在发生故障时,我可以恢复到15分钟的时间窗口,例如

  1. 04:00 完整备份
  2. 之后每分钟备份一次 Tran 日志

我无法找到任何关于清晰度是否R1Soft备份(通过完成VSS写入),会引起我的做法任何问题(particuarly打破日志链)。我对 VSS 知之甚少,而且我读得越多,它就越令人困惑。

我联系了 R1Soft 澄清,他们的回应是:

我们正在使用 VSS 进行 SQL 备份。您可以使用这两种解决方案,只要它不会同时运行。我们使用 VSS 编写器将日志刷新到数据中,然后完全备份数据库。

这对我来说毫无意义,因为我不知道他们所说的"data"是什么意思,并且它没有澄清日志链问题。因此,任何有 VSS 经验的人都可以澄清 VSS 备份是否“干扰”本机完整/传输日志备份?从我的研究中,我看到了相互矛盾的消息,因为 Microsoft 站点指出:

SQL Writer 不支持...日志备份

我不知道我是否应该按照我的建议去做,还是应该改为

  • 要求服务器主机修改数据库备份频率为15分钟
  • 防止 R1Soft 数据库备份,并手动处理,然后让它只是影子复制备份文件

任何输入,即使只是为了突出我应该问他们的问题,也将不胜感激。我读得越多,我就越困惑。

根据答案更新

database_name   backup_start_date       backup_finish_date      expiration_date   backup_type backup_size MB     logical_device_name     physical_device_name                                backupset_name  description   is_copy_only is_snapshot checkpoint_lsn        database_backup_lsn   differential_base_lsn  first_lsn             fork_point_lsn   last_lsn
--------------- ----------------------- ----------------------- ----------------- ----------- ------------------ ----------------------- --------------------------------------------------- --------------- …
Run Code Online (Sandbox Code Playgroud)

sql-server backup vss

2
推荐指数
1
解决办法
2314
查看次数

从奇怪的查询中调查错误

在我的数据库错误日志(在这个答案中生成)中,我看到以下查询的许多实例(每天数百个):

声明@HkeyLocal nvarchar(18)
声明@ServicesRegPath nvarchar(34)
声明@SqlServiceRegPath 系统名
声明@BrowserServiceRegPath 系统名
声明@MSSqlServerRegPath nvarchar(31)
声明@InstanceNamesRegPath nvarchar(59)
声明@InstanceRegPath 系统名
声明@SetupRegPath 系统名
声明@NpRegPath 系统名
声明@TcpRegPath 系统名
声明@RegPathParams 系统名称
声明@FilestreamRegPath 系统名
选择@HkeyLocal=N'HKEY_LOCAL_MACHINE'
-- 基于实例的路径
选择@MSSqlServerRegPath=N'SOFTWARE\Microsoft\MSSQLServer'
选择@InstanceRegPath=@MSSqlServerRegPath + N'\MSSQLServer'
选择@FilestreamRegPath=@InstanceRegPath + N'\Filestream'
选择@SetupRegPath=@MSSqlServerRegPath + N'\Setup'
选择@RegPathParams=@InstanceRegPath+'\Parameters'
-  服务
选择@ServicesRegPath=N'SYSTEM\CurrentControlSet\Services'
选择@SqlServiceRegPath=@ServicesRegPath + N'\MSSQLSERVER'
选择@BrowserServiceRegPath=@ServicesRegPath + N'\SQLBrowser'
-- InstanceId 设置
选择@InstanceNamesRegPath=N'SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL'
-  网络设置
选择@NpRegPath=@InstanceRegPath + N'\SuperSocketNetLib\Np'
选择@TcpRegPath=@InstanceRegPath + N'\SuperSocketNetLib\Tcp'
声明@SmoAuditLevel int
exec master.dbo.xp_instance_regread @HkeyLocal, @InstanceRegPath, N'AuditLevel', @SmoAuditLevel OUTPUT
声明 @NumErrorLogs int
exec master.dbo.xp_instance_regread @HkeyLocal、@InstanceRegPath、N'NumErrorLogs'、@NumErrorLogs …

sql-server sql-server-2016

2
推荐指数
1
解决办法
1598
查看次数

维护计划不要停止,不要备份所有数据库

我有一台包含 100 个数据库的服务器,我有一个用于备份的维护计划 (MP)。我注意到,当我查看备份文件夹目标时,维护计划不会备份所有数据库,我可以看到它在 50 个数据库之后停止 +-。作业仍处于运行模式 - 它不会停止。

因此,一方面,我可以看到没有新的备份文件(在前 50 个之后),另一方面,作业并未停止。

sql-server backup maintenance sql-server-2012 maintenance-plans

2
推荐指数
1
解决办法
1393
查看次数

数据库镜像 - 混合 SQL Server 2012 到 SQL Server 2016

我很确定答案是什么,但我想确认一下。有没有办法创建 SQL Server 2012 到 SQL Server 2016 的混合数据库镜像。

sql-server mirroring

2
推荐指数
1
解决办法
455
查看次数

查询执行期间获取的锁数

我在 SSMS 中执行一条语句,例如:

select Ident 
from PART_Stamm 
where VerketteterArtikelID = 'D9FA5CEC-E3C5-11E6-B088-F079596E5F58'
Run Code Online (Sandbox Code Playgroud)

在那里我可以显示执行计划。这完美地工作。现在我还需要显示PART_Stamm在执行上述查询期间在表上获取的锁数。我怎样才能得到这些信息?

sql-server sql-server-2012 locking

2
推荐指数
1
解决办法
772
查看次数

升级到 SQL Server 2017 后出现错误消息 10314,级别 16,状态 11,带有 SAFE 程序集

我有一个 SQL Server 2017 之前的数据库,我恢复到/升级到 SQL Server 2017。在这个数据库中,我有一个 SQLCLR 程序集。程序集被标记为SAFE因为它不执行任何需要更高级别权限的操作,并且数据库已TRUSTWORTHY禁用 / OFF。SQLCLR 函数和存储过程在迁移到 SQL Server 2017 之前按预期工作,但现在当我尝试执行其中任何一个时,我收到以下错误:

消息 10314,级别 16,状态 11,服务器 XXXXXXXXXXX,行 YYYYYY
      在 Microsoft .NET Framework 中尝试加载程序集 ID ZZZZZ 时出错。服务器可能会耗尽资源,或者程序集可能不受信任。再次运行查询,或检查文档以了解如何解决程序集信任问题。有关此错误的更多信息:
      System.IO.FileLoadException:无法加载文件或程序集“{assembly_name}”,版本=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。发生与安全相关的错误。(来自 HRESULT 的异常:0x8013150A)

我已确认已在服务器/实例上启用 CLR 集成/SQLCLR。

sql-server errors sql-clr sql-server-2017

2
推荐指数
1
解决办法
4025
查看次数

SQL Server:SET NOCOUNT ON 仍在返回数据

按照此页面中的示例,我无法阻止存储过程返回选择数据集。

执行这个:

SET NOCOUNT OFF;
GO
-- Display the count message.
SELECT 'should be displayed'
GO
-- SET NOCOUNT to ON to no longer display the count message.
SET NOCOUNT ON;
GO
SELECT 'should NOT be displayed'
GO
-- Reset SET NOCOUNT to OFF
SET NOCOUNT OFF;
GO
Run Code Online (Sandbox Code Playgroud)

将返回给我:

在问题上设置无计数

这是一个错误吗?有什么不对?我在 SQL Server 13.0.4206 上

sql-server sql-server-2016

2
推荐指数
1
解决办法
8806
查看次数

就地更新导致转发记录

我很清楚堆中的转发记录是什么。由于我想将转发记录保留为 0,因此我们决定仅更新无法扩展的列。

最近在我的系统上我遇到了转发记录。
表设计是这样的:

CREATE TABLE dbo.test (
 HashValue BINARY(16) NOT NULL,
 LoadTime DATETIME NOT NULL,
 LoadEndTime DATETIME NULL,
[other columns that never get updates]
) WITH(DATA_COMPRESSION=PAGE);
Run Code Online (Sandbox Code Playgroud)

插入语句总是带来HashValueAND LoadTime。我检查了查询日志。
我插入一个值 '9999-12-31'。

现在系统执行更新LoadTime如下:

;WITH CTE AS (
SELECT *, COALESCE(LEAD(LoadTime) OVER(PARTITION BY HashValue ORDER BY LoadTime) ,'9999-12-31') as EndTimeStamp
)
UPDATE CTE SET LoadEndTime = EndTimeStamp;
Run Code Online (Sandbox Code Playgroud)

由于该LoadEndTime列始终被填充,因此在执行更新时,该行内不应有该列的扩展。它应该是一个就地更新。在那个过程之后我仍然总是得到转发的记录......这对我来说没有意义。

插入语句是这样的:

INSERT INTO dbo.test (HashValue, LoadTime,LoadEndTime)
SELECT HASHBYTES(...), GETDATE(), '1900-01-01'
Run Code Online (Sandbox Code Playgroud)

所以已经有一个虚拟值。即使使用压缩,日期时间 '1900-01-01 00:00:00' 的固定和可变表示应该是 8 个字节。

sql-server heap update

2
推荐指数
1
解决办法
80
查看次数

为什么无法连接远程报表服务器实例?

我在ServerR.

我可以轻松地使用我的本地 SSMS 来连接ServerR的数据库引擎和报告服务。

当我尝试使用本地报告服务配置管理器时,即使我输入服务器名称ServerR并单击“查找”,它也会显示“未找到报告服务器。 ”

为什么?

sql-server ssrs

2
推荐指数
1
解决办法
1529
查看次数