小编Jam*_*ins的帖子

如何查找哪些 SQL 作业正在使用特定帐户作为代理?

我们已发现一些不恰当地使用代理帐户的服务器。其中一些服务器具有多个凭证和大量作业。不需要在每个步骤上手动检查作业属性 GUI 的“运行方式”。

如何快速识别哪些作业(如果有)包含使用我们认为不适当的代理凭证的步骤?

我想查看与代理相关的帐户。以及使用代理的作业名称和步骤。

SQL 2008+

security sql-server proxy

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

我们真的应该为每个 SQL 实例打开跟踪标志 1118 吗?

建议每个 SQL 实例都打开 TF 1118

Paul 对使用跟踪标志 1118 的建议是什么?从 SQL Server 2000 开始,每个人都应该在 SQL Server 的所有实例上打开它。打开它没有任何缺点。 保罗·兰德尔

它记录在KB 2154845 中,虽然它确实影响所有数据库,但影响最大的是 tempdb

这意味着实例上每个数据库中的每个新分配的对象都会获得自己的私有 64KB 数据。Tempdb 通常是创建大多数对象的地方,因此它在那里发挥了最大的作用。 肯德拉·利特尔

我环顾四周,没有发现任何人反对使用它。那么,我们应该在创建新实例时将其作为我们流程的一部分,并在机会出现时将其追溯添加到现有 SQL 实例中吗?

我在 2014 年使用 SQL 2000,还没有在 2016 年上线。我们按照说明为每个处理器使用 1 个 tempdb,最多 8 个。

sql-server tempdb trace-flags

5
推荐指数
1
解决办法
399
查看次数

为所有数据库启用查询存储

我想开始使用带有Erin Stellato 建议设置的查询存储。

USE [master]
GO
ALTER DATABASE DatabaseName SET QUERY_STORE = ON
GO
ALTER DATABASE DatabaseName SET QUERY_STORE (OPERATION_MODE = READ_WRITE
, INTERVAL_LENGTH_MINUTES = 30
, MAX_STORAGE_SIZE_MB = 1000
, QUERY_CAPTURE_MODE = AUTO)
GO
Run Code Online (Sandbox Code Playgroud)

但这是一个数据库设置,我希望能够一次激活一个实例的所有数据库。

我找到了SET RECOVERY Model Using sp_msforeachdb (at serverfault)

我可以使用 OP 的解决方案

EXECUTE master.sys.sp_MSforeachdb 'USE [?];
IF DB_ID() >= 5
ALTER DATABASE [?] SET QUERY_STORE = ON
ALTER DATABASE [?] SET QUERY_STORE (OPERATION_MODE = READ_WRITE
, INTERVAL_LENGTH_MINUTES = 30
, MAX_STORAGE_SIZE_MB = 1000 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016 query-store

5
推荐指数
1
解决办法
4911
查看次数

创建新数据库时可以自动打开“查询存储”吗?

查询存储在 SQL Server 2016+ 和 Azure SQL DB 中可用,默认情况下处于启用状态。对于本地 SQL Server,它必须在每个数据库上单独启动。

创建新数据库时,有没有办法默认启用查询存储?

sql-server sql-server-2016 query-store

4
推荐指数
1
解决办法
391
查看次数

什么是 Query Store 2017 中的“日志内存”

在 SQL 2017 中,除了2017添加的之外,还有一个新的执行指标“日志内存”我没有找到任何关于它的信息。

执行指标:(SQL 2017)

CPU 时间、持续时间、执行计数、逻辑读取、逻辑写入、内存消耗、物理读取、CLR 时间、并行度 (DOP)、行计数、日志内存、TempDB 内存和等待时间

我相信我了解所有其他指标是什么以及我为什么会关心。

我在几个特定时期运行了前 5 个资源消耗查询的所有指标。我记录了,现在我正在检查结果。我知道“日志内存”的(非常大)值以 KB 为单位。

指标“日志内存”究竟是什么?

编辑,收到两个答案我检查

LowlyDBA的回答表明它是来自 5 个相关领域的组合sys.query_store_runtime_stats

使用jadarnel27 在他们的回答中提供的代码来验证

我创建了数据库 '231682' 并运行了 5 个字段的测试查询,我得到的结果非常相似

231682-数据

我总结(用于=SUM()在Excel中)我的价值观,并得到1383040(字节)

我查看了查询存储,对于使用的日志内存 (KB),它显示的值为 354,058,240 (KB),这个数字要大几个数量级,与字节相比也是 KB,以字节为单位,它将是 354,058,240,000(字节)

231682-QS

我把所有字段的总数相加,只得到 1,655,236(字节)

SELECT *
FROM sys.query_store_runtime_stats qsrs
WHERE qsrs.avg_log_bytes_used > 0;
Run Code Online (Sandbox Code Playgroud)

我怀疑我的问题的答案是 SQL 2017 中的“日志内存”指标没有任何实际价值。这个小实验中显示的值是 354GB,高得不切实际。

sql-server query-store sql-server-2017

4
推荐指数
2
解决办法
337
查看次数

在while循环中显示局部变量

我有一个运行数天的 while 循环(bydesign)请参阅相关是否有限制可以将多少个备份附加到单个文件?

我有一个显示循环计数的局部变量,当我在查询窗口中运行它时,我可以用 print @counter

我现在正在作业中运行 while 循环,并且我想显示该@counter值。经过一番研究,我尝试了RAISERROR (Transact-SQL),它应该显示在 SQL 错误日志中,但它不起作用。我读了Using RAISERROR我认为我的代码是正确的,但不确定它是否可以在带有局部变量的 While 循环中使用。

创建数据库并准备它

USE [master]
GO
Create database T_test

USE [master]
GO
ALTER DATABASE [T_test] SET RECOVERY FULL WITH NO_WAIT
GO

BACKUP DATABASE T_test to disk= N'K:\Test\T_test.bak' with noinit --Create first full
GO
Run Code Online (Sandbox Code Playgroud)

尝试在查询窗口中运行以进行测试

DECLARE @counter int
SET @counter = 0
WHILE 1=1
BEGIN 
BACKUP DATABASE [T_test] TO  
DISK = N'K:\Test\T_Test.diff' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  
NAME = N'T_Test-Diff Database …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2017

4
推荐指数
1
解决办法
78
查看次数

新数据库“BackupLocDb_###”从何而来?

昨天我在一个 3 节点 AlwaysOn 实例组 SQL 2014 SP3 上做一些工作,今天早上我发现有一个名BackupLocDb_1260a388-153d-4c86-a30b-0fd3feafb116为主数据库的数据库。我没有创建数据库,但我被列为所有者。

这个数据库是从哪里来的?

最初尝试使用 google,将我带到了一些 AlwaysOn 帖子,但没有明确提及数据库。我也没有在 DBA.SE 上找到它。

sql-server availability-groups sql-server-2014

4
推荐指数
1
解决办法
2097
查看次数

伪简单 SQL Server 恢复是真的吗?

“伪简单 SQL Server 恢复”是术语和场景,我刚刚在(现已删除)新问题的评论中了解到SQL Server 使用仅复制备份截断事务日志

我转到了 Rajendra Gupta 于 2019 年 10 月 7 日发布的Pseudo-Simple SQL Server Recovery Model帖子并使用了那里的一些代码和我自己的一些代码进行了一些测试。

创建数据库(Rajendra 的代码)

CREATE DATABASE RecoveryModel;
Run Code Online (Sandbox Code Playgroud)

并验证它是完整的(Rajendra 的代码)

SELECT name, 
    recovery_model_desc
FROM sys.databases
WHERE name = 'RecoveryModel';
Run Code Online (Sandbox Code Playgroud)

做一些工作(Rajendra 的代码,稍作修改)

Use RecoveryModel
CREATE TABLE test(id INT);
GO 
INSERT INTO test
VALUES(1);
GO 5000
Run Code Online (Sandbox Code Playgroud)

查看使用了多少日志空间(我的代码)

select file_id
, type_desc
, name
, substring([physical_name],1,3) AS [Drive]
, physical_name
, state_desc
, size / 128 as 'AllocatedSizeMB'
, …
Run Code Online (Sandbox Code Playgroud)

sql-server backup terminology

4
推荐指数
1
解决办法
296
查看次数

如何在数据库中找到最大日期戳?

我想在数据库中找到最近的日期。

我可以使用 sys.dm_db_index_usage_stats 来查找它上次更新的时间,但如果自上次服务器重启以来它没有更新,则此处没有任何值

我可以使用 MAX()

use adventureworks
select Max(ModifiedDate)
from HumanResources.Department
Run Code Online (Sandbox Code Playgroud)

但是我需要查看数据库中的每个表,找到每个日期时间(或日期、小日期时间、日期时间2)字段并多次运行查询,然后确定哪个是最近的。

我想要类似的东西

use <some_db>
select MAX(<FieldThatIsADate>)
from <anytable_in_db>
Run Code Online (Sandbox Code Playgroud)

我已经谷歌搜索,并没有找到使用数据类型代替字段名称的方法。我没有试图找到命名特定表的方法。

我怎样才能使这个查询像现实一样便携?

如果我必须为每个数据库中的每个表构建和运行一个唯一的查询,那么这就是我必须做的。

sql-server datetime

3
推荐指数
1
解决办法
6085
查看次数

对新 DBA 最有用的存储过程?

我是一名新的 DBA,与几个更有经验的 DBA 一起工作。当我挠头时,其中一个人说“哦,只需运行 SP_xx_xx”,然后果然开始了解决方案。

当然他们都只认识他们,我决定开始一个清单。我没有把它们都写下来,所以我的清单中只有这三个。

  • sp_Cycle_Errorlog
  • sp_whoisactive
  • sp_change_users_login '报告'

我用谷歌搜索并想出了一些非常古老的清单

对于 SQL 2012/2014,新 DBA 的工具包中最好或最有用的存储过程是什么?

sql-server stored-procedures

3
推荐指数
1
解决办法
1509
查看次数