标签: sql-server

如何调查“积极索引”

在我的数据库上运行 sp_BlitzIndex 后,我发现了许多“主动索引”(https://www.brentozar.com/blitzindex/sp_blitzindex-aggressive-indexes/)。不仅如此,我还发现“积极索引”的数量正在缓慢增加。

我是一名涉足 DBA 方面的开发人员,我不知道如何从 sp_BlitzIndex 提供的有关主动索引的信息改进它们。

我可以调整单个查询的性能,但是我不知道如何找出索引变得激进时可能发生的查询,并且我假设发生锁定是因为服务器负载不足 - 这不会如果我调整单个查询,情况并非如此。

任何有关如何进一步调查的提示将不胜感激。

performance sql-server sp-blitzindex performance-tuning

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

SQL Server 2016 作业永远运行

我在 SQL 2016 上创建了一个 SQL Server 作业。这是一个从我们的备份实用程序 DDBoost 运行完整备份的作业。当我执行作业时,所有数据库的备份将在 5 分钟内完成。但是,该作业将永远运行。有任何想法吗?

USE [master]
GO
DECLARE @returnCode int
EXEC   @returnCode = dbo.emc_run_backup 
' -c <FullyQualifiedName> -k -S 4 -l full -y +90d 
-a "NSR_DFA_SI=TRUE" -a "NSR_DFA_SI_USE_DD=TRUE" 
-a "NSR_DFA_SI_DD_HOST=adc-dd-02" -a "NSR_DFA_SI_DD_USER=ddboost" 
-a "NSR_DFA_SI_DEVICE_PATH=/sql-prod" 
-a "NSR_DFA_SI_DD_LOCKBOX_PATH=D:\Program Files\EMC DD Boost Modules\DDBMA\config"
-a "NSR_SKIP_NON_BACKUPABLE_STATE_DB=TRUE" 
-a "SKIP_BACKUP_PROMOTION=FALSE" "MSSQL$PRSQL01:"'

IF @returnCode <> 0
BEGIN
    RAISERROR ('Fail!', 16, 1)
END
Run Code Online (Sandbox Code Playgroud)

sql-server jobs

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

Ola Hallengren DatabaseBackup 在定位 Windows 目录时出错

需要帮助解决使用Ola Hallengren 的存储过程将数据库备份到共享文件夹的问题。

我有一个在 SQL Server 启动时执行的过程。它运行Ola Hallengren的DatabaseBackup程序。SQL Server 服务在NT Service.

该共享对运行 SQL 的计算机具有权限。

现在,如果DatabaseBackup手动执行它会很好。当它在启动时自动执行时失败并出现以下错误:

Msg 50000, Level 16, State 1, Procedure DatabaseBackup, Line 786 [Batch Start Line 0] 目录 \\*** 不存在

如果我用Execute As DBO子句更改程序,它会失败并出现相同的错误。

我也试过AlterSP withExecute As Self子句 - 又是同样的错误。

所以问题是:

我该怎么做才能让它发挥作用?

  • 文件路径以 UNC 路径的形式提供(例如\\machine2\backup\)
  • 这是 SQL Express,所以我无权访问 SQL 代理作业。
  • 因此,这是一个配置为在 SQL Server 实例启动时运行的存储过程,而不是设置为在 SQL 代理启动时运行的 SQL 作业。

security sql-server ola-hallengren

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

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
查看次数