我已经实现了 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 数据库服务器,它使用R1Soft 备份备份每 24 小时在 02:00 进行一次服务器备份。这是一个完整的文件系统备份(裸机加上每日差异,因此包括操作系统等)。
我想增加一些数据库的备份频率,以便在发生故障时,我可以恢复到15分钟的时间窗口,例如
我无法找到任何关于清晰度是否R1Soft备份(通过完成VSS写入),会引起我的做法任何问题(particuarly打破日志链)。我对 VSS 知之甚少,而且我读得越多,它就越令人困惑。
我联系了 R1Soft 澄清,他们的回应是:
我们正在使用 VSS 进行 SQL 备份。您可以使用这两种解决方案,只要它不会同时运行。我们使用 VSS 编写器将日志刷新到数据中,然后完全备份数据库。
这对我来说毫无意义,因为我不知道他们所说的"data"是什么意思,并且它没有澄清日志链问题。因此,任何有 VSS 经验的人都可以澄清 VSS 备份是否“干扰”本机完整/传输日志备份?从我的研究中,我看到了相互矛盾的消息,因为 Microsoft 站点指出:
SQL Writer 不支持...日志备份
我不知道我是否应该按照我的建议去做,还是应该改为
任何输入,即使只是为了突出我应该问他们的问题,也将不胜感激。我读得越多,我就越困惑。
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) 在我的数据库错误日志(在这个答案中生成)中,我看到以下查询的许多实例(每天数百个):
声明@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 …
我有一台包含 100 个数据库的服务器,我有一个用于备份的维护计划 (MP)。我注意到,当我查看备份文件夹目标时,维护计划不会备份所有数据库,我可以看到它在 50 个数据库之后停止 +-。作业仍处于运行模式 - 它不会停止。
因此,一方面,我可以看到没有新的备份文件(在前 50 个之后),另一方面,作业并未停止。
sql-server backup maintenance sql-server-2012 maintenance-plans
我很确定答案是什么,但我想确认一下。有没有办法创建 SQL Server 2012 到 SQL Server 2016 的混合数据库镜像。
我在 SSMS 中执行一条语句,例如:
select Ident
from PART_Stamm
where VerketteterArtikelID = 'D9FA5CEC-E3C5-11E6-B088-F079596E5F58'
Run Code Online (Sandbox Code Playgroud)
在那里我可以显示执行计划。这完美地工作。现在我还需要显示PART_Stamm在执行上述查询期间在表上获取的锁数。我怎样才能得到这些信息?
我有一个 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。
按照此页面中的示例,我无法阻止存储过程返回选择数据集。
执行这个:
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 上
我很清楚堆中的转发记录是什么。由于我想将转发记录保留为 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 个字节。
我在ServerR.
我可以轻松地使用我的本地 SSMS 来连接ServerR的数据库引擎和报告服务。
当我尝试使用本地报告服务配置管理器时,即使我输入服务器名称ServerR并单击“查找”,它也会显示“未找到报告服务器。 ”
为什么?