标签: sql-server-2016

列出所有未连接到 SQL 服务器的数据库

我正在将数据库从一个实例移动到另一个实例(通过从第一个实例分离数据库,将MDF文件移动并记录到另一个位置,并将它们附加到新实例),不幸的是无法附加其中的一些,并且错过了计算的数据库数量有问题,如何MDF从特定目录检查所有未附加到 SQL 服务器的文件。

sql-server sql-server-2016

0
推荐指数
1
解决办法
1912
查看次数

页面预期寿命突然下降

查看性能数据,我意识到在 VMWare 上运行的 Sql Server 2016 SP1 上的页面预期寿命突然下降,消耗 58982 MB 的 64 GB RAM。PLE 的先前值约为 133,000,突然下降到 7,300 秒。

在此处输入图片说明

看起来候选人只有一个查询会导致这种情况。我上传了执行计划

该查询在早上很早就运行,因此看起来系统上几乎没有其他活动。它需要 01:27 m:s 运行时间并导致 600,000 次读取。

为什么这个查询会导致 PLE 的下降?

下降的后果是什么?

sql-server memory sql-server-2016 page-life-expectancy

0
推荐指数
1
解决办法
5485
查看次数

与自动收缩 TempDB 作为 SQL 代理作业相关的风险?

我有一种情况,我对 TempDB 的大小有限制,不能超过 350 GB。我autogrowth 10在 TempDB 上使用(百分比),因为我读到它应该是超过 500 MB 的数据库的最佳实践。

当我使用

 dbcc checkdb with estimateonly 
Run Code Online (Sandbox Code Playgroud)

在每个数据库上,我注意到 TempDB 的估计需求比我目前的需求低得多。将 返回的值相加dbcc checkdb with estimateonly得到大约 75 GB 的值。

TempDB 的大小目前为 300 GB。我无法进一步增加 TempDB 的允许大小。

我听说我们公司以前有一个 SQL 作业,如果它超过某个值,它会自动缩小 TempDB,但它没有在我们的新环境中使用。然而,我很矛盾,对缩小 TempDB 过于宽松可能会导致问题。

使用这篇文章中的信息,如果当前大小超过 200 GB 左右,将 TempDB 自动收缩到 200 GB 大小是否存在任何重大风险,看到dbcc checkdb with estimateonly返回的估计最小大小为 75 GB,这将导致这一个相当高的相对缓冲?

我读过这不是缩小 TempDB 的最佳做法,但在这种情况下,参考 TempDB 的估计最小大小,它可能更“合法”吗?

编辑

我做了以下查询,例如,internal object MB space, internal object dealloc MB space, statement text(查询), total …

sql-server shrink tempdb sql-server-2016

0
推荐指数
1
解决办法
821
查看次数

数据库收缩任务失败

一周前我制定了一个维护计划,并且每晚都执行得很好。现在数据库收缩任务已停止工作并抛出此错误:

属性大小不可用于数据库“[foo]”。此对象可能不存在此属性,或者可能由于访问权限不足而无法检索。

昨天我安装了几个由 Windows 更新提供的 SQL Server 修补程序(4411 和 4457,如果有的话)。这是我可能做出的唯一改变。

我的任务是这样的:

  • 连接:本地服务器连接(sa)
  • 数据库: 所有数据库 所有用户数据库
  • 当数据库增长超过时收缩数据库:50 MB
  • 收缩后剩余的可用空间量 (10%)
  • 将释放的空间返回给操作系统

我的一些发现:

  • 如果我生成 T-SQL 代码并手动执行它,它将完美运行。
  • 如果我创建一个具有相同数据库收缩任务的新维护计划,它将完美运行。

问题是什么?

sql-server ssms sql-server-2016

0
推荐指数
1
解决办法
2903
查看次数

说服我的 DBA 存在 SQL Server 的零星问题

我如何说服我的 DBA 存在 SQL Server 的零星问题?

问题:基本上,主要减速......一些查询,生成执行计划,甚至生成现有数据库对象的脚本有时可能需要永远。即使是应该没有性能问题的操作,比如生成创建表脚本,有时也可能需要很长时间。

情况 - 我有一个 SQL Server 数据库,我可以在其中创建表/视图/等。

该数据库托管在由公司 IT 管理的 SQL Server (MS SQL Server 2016) 上。

我已经让他研究一下,我相信他一直在认真检查日志,他说服务器上的负载有时我注意到大量的性能问题没有显示出任何异常。事实上,他说这都在 5% 以下(非常低)。

我在暂存和开发环境中运行完全相同的代码和查询,在那里很好 - 相对于生产环境,它甚至超快。

老实说,我不知道这可能是什么问题。我不知道从哪里开始。

performance sql-server sql-server-2016

0
推荐指数
1
解决办法
93
查看次数

只更新一列,奇怪的执行计划

我在我的数据库中记录了最慢的查询,其中一个让我感到惊讶,在列表中显示了很多次,并且执行通常需要很多秒。

UPDATE books SET last_read='2018-12-31 11:23:45' WHERE book_id='15'
Run Code Online (Sandbox Code Playgroud)

book_id 是 int 身份 PK(集群),last_read 是日期时间。查询是用单引号中的 15 编写的,因此需要转换,但我无法想象这是一个大问题,因为每个查询只进行一次转换。表上有 6 个索引,但列 last_read 未涉及或包含在其中任何一个中。PK 在 book_id 上,没什么特别的。

估计的执行计划告诉我:

UPDATE: 0%
Clustered Index Update (on the PK constraint): 100%
Run Code Online (Sandbox Code Playgroud)

我不希望查询更新任何索引,因为 last_read 没有以任何方式编入索引,并且 book_id 没有更改。

我错过了什么?

sql-server execution-plan sql-server-2016

0
推荐指数
1
解决办法
274
查看次数

SQL Server 并行备份

目前我正在使用 ola hallengren 备份和维护脚本。

我有个问题:

我在一台服务器上有 5 个大数据库。每天大约需要 10 多个小时才能完成完整备份。目前它正在按顺序写入磁盘。

我想并行写入所有备份以减少时间。有什么办法可以并行编写备份吗?

我正在压缩并仅验证备份到网络位置

backup sql-server-2016 ola-hallengren

0
推荐指数
1
解决办法
2015
查看次数

如何在此存储过程中添加选项(重新编译)?

在我现在的环境中,我有很多存储过程的实例,就像下图所示的那样,将一堆参数传递给过程,然后在过程select exists中运行a ,并根据结果运行不同的逻辑路径在存储过程中。

我对以下程序有几个问题:

1)它是参数嗅探的好选择吗?

2)我怎么能option(recompile)在代码中添加?

在代码中添加选项(重新编译)与使用重新编译创建存储过程之间存在差异。

option(recompile)如果可能的话,我会更热衷于。

ALTER PROCEDURE [dbo].[usp_upd_activity]
                    @activityId             INT,
                    @title                  VARCHAR(100), 
                    @description            VARCHAR(MAX),
                    @inclusions             VARCHAR(MAX),
                    @locationId             INT,
                    @imageUriMain           VARCHAR(255),
                    @uploadToBucket         VARCHAR(200),
                    @path                   VARCHAR(200)
AS
BEGIN

    SET NOCOUNT ON;

    BEGIN TRAN 
    BEGIN TRY

        DECLARE @documentId INT

        IF NOT EXISTS (SELECT 1
                         FROM document 
                        WHERE activityId    = @activityId)
        BEGIN
            INSERT INTO  document 
                        (   [uploadToBucket], [path], [activityId])
            VALUES      (@uploadToBucket, @path, @activityId)

            SET @documentId = SCOPE_IDENTITY();


        END
        ELSE
        BEGIN
            UPDATE  document
            SET     uploadToBucket  = @uploadToBucket, …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures optimization sql-server-2016 parameter-sniffing

0
推荐指数
1
解决办法
1614
查看次数

我们如何识别 AlwaysOn 进程?

我只是想在我的其中一台生产数据库服务器上配置“资源调控器”,我们已经在其中实现了 AlwaysOn。

许多应用程序(如 SSRS、Web App 和 SSIS)连接到数据库服务器。

我可以使用APP_NAME()函数获取 SSRS、Web 应用程序和 SSIS 的应用程序名称,但无法获取 AlwaysOn 进程的应用程序名称。

有什么方法可以识别它,以便我们可以通过资源调控器监视/限制 AlwaysOn 正在/将使用多少资源。

sql-server sql-server-2016

0
推荐指数
1
解决办法
79
查看次数

删除查询阻塞其他并发事务

DELETE我的生产 SQL 服务器中的查询导致死锁。我知道 DELETE 导致了这种情况,因为我检查了扩展事件并检查了死锁 XML 并发现此 DELETE 正在阻塞,这最终导致死锁。

所以DELETE是发生在两个表格,TB1和TB2。tb1 的主键在 tb2 中可用作外键,并CASCADE DELETE在 tb2 外键中使用。

我什Allow Page LocksFALSE在 tb1 和 tb2 中创建了聚集索引,但仍然没有运气。

我想READ COMMITTED SNAPSHOT在我的数据库中尝试之前尝试所有其他选项。

任何帮助将不胜感激。

附加信息:

使用READ COMMITTED SNAPSHOT也是一个挑战,因为它涉及风险。

  • 我的数据库大小很大(~1.6 TB),RAM 为 128 GB。
  • 使用 SQL Server 2016

这是 XDL

<deadlock>
 <victim-list>
  <victimProcess id="process257a65d6ca8" />
 </victim-list>
 <process-list>
  <process id="process257a65d6ca8" taskpriority="0" logused="6024" waitresource="KEY: 6:72057794784329728 (bb7a6e52eae1)" waittime="4485" ownerId="45816472292" transactionname="user_transaction" lasttranstarted="2019-01-08T11:30:06.837" XDES="0x24883ec2a70" lockMode="RangeS-U" schedulerid="26" kpid="39320" status="suspended" spid="217" sbid="2" …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock delete locking sql-server-2016

0
推荐指数
1
解决办法
1019
查看次数