小编Han*_*non的帖子

活动监视器显示 WAITFOR RECEIVE 的持续时间很长

在活动监视器中,以下查询导致高 CPU 和 281 毫秒的平均持续时间。

WAITFOR (
RECEIVE conversation_handle
    , service_contract_name
    , message_type_name
    , message_body 
FROM ExternalMailQueue 
INTO @msgs
)
, TIMEOUT @rec_timeout
Run Code Online (Sandbox Code Playgroud)

任何想法或步骤如何解决这个问题?

sql-server service-broker

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

有没有办法恢复删除的 mysql 数据库?

我不小心在我的服务器上丢了一个 MySQL 数据库。有没有办法恢复被删除的数据库?

mysql

8
推荐指数
2
解决办法
12万
查看次数

TempDB 与 48 核 AMD Opteron 机箱上的 24 个物理 tempdb 文件的争用

我刚刚收到有关 SQL Server 2005 实例的以下通知。该实例的核心与 tempdb 文件的比率为 2:1,tempdb 文件总数为 24 个文件。不应该发生争用 - 我将如何检测这种争用的来源?TempDB 和所有其他数据库都通过 10 GB 以太网存储在 SAN 存储上。SAN 在一个 RAID-60 阵列中配置了 46 个 10k SAS 驱动器。该阵列与多个 VMWare 服务器和一个或两个 Exchange 服务器共享。

来自 Idera SQL 诊断管理器的通知:

2012 年 11 月 8 日下午 10:49:00,MGSQL01 上的 Tempdb 争用 (ms) 至关重要。

在 MGSQL01 上检测到 Tempdb 闩锁争用。检测到的总等待时间为 1782 毫秒。这表明性能受到 tempdb 中分配映射争用的影响。如果这是一个常规问题,可以通过遵循有关 tempdb 文件计数、大小和 IO 子系统的最佳实践来缓解。

PFS 等待时间:1782 ms GAM 等待时间:0 ms SGAM 等待时间:0 ms

Tempdb 争用 (ms):tempdb 分配映射(GAM、SGAM 和 PFS)的当前等待时间,以毫秒为单位。此警报只能在运行 SQL 2005 或更高版本的实例上引发。

sql-server-2005 sql-server

8
推荐指数
1
解决办法
1435
查看次数

Kerberos 身份验证不适用于 SQL Server 2012 中的链接服务器

我正在使用 2 个在 Windows Server 2012 上运行 SQL Server 2012 的 SQL Server 设置 DEV/TEST 环境。我们正在从 Windows Server 2008 上的 SQL Server 2005 迁移,在那里我们已经正确启动并运行。

在 SQL Server 2012 中,Kerberos 身份验证不起作用。

每个服务器都有自己的 Active Directory 帐户,该帐户具有通过 Active Directory 用户和计算机授予的“写入服务主体名称”和“读取服务主体名称”权限。每当我连接到 SQL Server 2005 服务器并运行:

SELECT net_transport, auth_scheme 
FROM sys.dm_exec_connections 
WHERE session_id = @@SPID;
Run Code Online (Sandbox Code Playgroud)

我懂了:

net_transport    auth_scheme
TCP              KERBEROS 
Run Code Online (Sandbox Code Playgroud)

当我对新的 SQL Server 2012 实例执行相同的查询时,我看到:

net_transport    auth_scheme
TCP              NTLM 
Run Code Online (Sandbox Code Playgroud)

如果我SetSPN -Q MSSQLSvc/*用来查询服务主体名称的活动域,我会看到列出的 2005 和 2012 服务器,除了服务器名称之外,其他方式完全相同。

例如:

MSSQLSvc/SERVERa2005.domain.inet
MSSQLSvc/SERVERa2005domain.inet:1433
MSSQLSvc/SERVERb2005.domain.inet
MSSQLSvc/SERVERb2005domain.inet:1433
MSSQLSvc/SERVERa2012.domain.inet
MSSQLSvc/SERVERa2012domain.inet:1433 …
Run Code Online (Sandbox Code Playgroud)

sql-server linked-server sql-server-2012 kerberos

8
推荐指数
1
解决办法
6397
查看次数

SQL Server 2008R2 转换排序规则

我有一个使用Arabic_CI_AS排序规则的现有数据库,但我需要将其转换SQL_Latin1_General_CP1_CI_AS为服务器的默认排序规则,但问题是当我使用以下命令时:

USE master;
GO

ALTER DATABASE MyDB
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误消息:

消息 5075,级别 16,状态 1,第 1 行
对象“GetAllSuppliersInCompliance”依赖于数据库整理。如果模式绑定对象依赖于数据库排序规则,则无法更改数据库排序规则。删除对数据库排序规则的依赖,然后重试该操作。

消息 5075,级别 16,状态 1,第 1 行
对象“GetTier1SupplierComplianceStatus”依赖于数据库整理。如果模式绑定对象依赖于数据库排序规则,则无法更改数据库排序规则。删除对数据库排序规则的依赖,然后重试该操作。.....

消息 5072,级别 16,状态 1,第 1 行
ALTER DATABASE 失败。数据库“MyDB”的默认排序规则不能设置为 SQL_Latin1_General_CP1_CI_AS。

因此,我尝试使用以下命令暂时禁用约束:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
Run Code Online (Sandbox Code Playgroud)

然后我执行了第一个命令,但是出现了同样的错误。

sql-server sql-server-2008-r2

8
推荐指数
1
解决办法
9158
查看次数

如何在 Sql server 2008 中安排作业不到 10 秒?

我想每 3 秒运行一次作业,但是在 SQL Server 2008 中我们不能定义小于 10 秒的间隔。

该作业用于将访问者信息和细分信息插入/更新到由谷歌搜索跟踪的数据库中。

在 2 或 3 秒内最多插入大约 100 行。该作业插入并更新数据库中的表。有没有办法使用sp作业调度配置来调度它?

sql-server-2008 sql-server jobs

8
推荐指数
2
解决办法
4927
查看次数

我可以在多个磁盘上进行完整备份吗?

目前,我只有一个备份文件 IMTDB.bak,它与数据库本身在同一个 HDD 上。我想通过本质上将它“复制”到另一个磁盘来增加这个数据库备份的冗余,但是我收到一个错误“服务器备份失败,媒体被格式化为支持 2 个媒体系列”。我认为这意味着当我创建备份时,它只是将备份放在一个驱动器上,我不能追溯添加更多。我想将备份迁移到另一个驱动器(实际上只是复制它),但我不想删除当前备份来执行此操作。

我该怎么办?将 IMTDB.bak 复制到另一个驱动器上的文件夹是否安全?

sql-server sql-server-express sql-server-2014

8
推荐指数
2
解决办法
2267
查看次数

将用户添加到多个数据库

我在一台服务器上有 980 个数据库,我应该授予几个用户只读访问权限。

我当然不想运行alter DB add user...语句,因为它绝对是耗时的。

不知道有没有用exec sp_addrolemember 'db_datareader', 'user'

有人可以让我知道是否可以做其他事情吗?

sql-server

8
推荐指数
2
解决办法
8033
查看次数

即使使用非聚集索引和全文索引,SE​​LECT 查询也很慢

我试图从表中查询 0 到 65,000 行。

服务器使用的是Microsoft SQL Server 2014,我无法更改服务器上的硬件。

架构

[Id] (PK)        INT      
[varchar1]  VARCHAR(4)     Normal Cardinality
[varchar2]  VARCHAR(250)   Normal Cardinality
[varchar3]  VARCHAR(250)   Normal Cardinality
[varchar4]  VARCHAR(100)   Normal Cardinality
[date1]     DATETIME       High Cardinality
[varchar5]  VARCHAR(100)   Low Cardinality
[varchar6]  VARCHAR(1000)  Normal Cardinality
[varchar7]  VARCHAR(100)   Normal Cardinality
[varchar8]  VARCHAR(20)    Normal Cardinality
[varchar9]  VARCHAR(100)   High Cardinality
[xml1]      XML            Low Cardinality
Run Code Online (Sandbox Code Playgroud)

询问

以下查询是存储过程的一部分(其余部分无关紧要,因为它对存储过程的性能影响不大)。列名称已替换为列类型和编号:

SELECT   [varchar1]
       , [varchar4]
       , [date1]
       , [varchar5]
       , [varchar6]
       , [varchar7]
       , [varchar8]
       , [varchar9]
       , [xml1]
FROM [database].[dbo].[table] WITH …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures t-sql sql-server-2014

8
推荐指数
1
解决办法
2200
查看次数

SQL Server 遇到 THREADPOOL 等待,但仍有大量可用工作线程

我最近查看了我的生产 SQL Server 的累积线程池等待时间,这确实是几天的等待时间。所以我开始做一些挖掘。

我在 32 核 64 位服务器上(在 EC2 上运行)。Max workers 在配置中正确设置为 0,以下 DMV 报告了正确的预期数字:

SELECT max_workers_count FROM sys.dm_os_sys_info

Output: 960
Run Code Online (Sandbox Code Playgroud)

看看我的工人总数,我很少看到超过 300-400 的:

SELECT count(*) FROM sys.dm_os_workers

Output: 372
Run Code Online (Sandbox Code Playgroud)

然而,如果我运行以下 DMV,我总是会列出线程:

SELECT * FROM sys.dm_os_waiting_tasks
WHERE wait_type = 'THREADPOOL'
Run Code Online (Sandbox Code Playgroud)

等待任务——线程池

SELECT dow.state , dow.is_preemptive , dow.is_sick , dow.is_in_polling_io_completion_routine , [Num Workers] = COUNT(1) 
FROM sys.dm_os_workers dow 
GROUP BY dow.state , dow.is_preemptive , dow.is_sick , dow.is_in_polling_io_completion_routine;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

以毫秒为单位的等待通常很短,一般为 20-200 毫秒,它们也很快消失,但它们增加了整体累积线程池数字。他们也从来没有阻塞会话。

当我有这么多可用的工作人员时,我很困惑为什么会遇到线程池等待。数百个可用的工作人员不应该在没有任何线程进入线程池的情况下立即处理这些请求吗?

我很感激这里的任何输入或方向。

SQL Server 版本:SQL Server 2016 (SP2-CU8) (KB4505830) …

sql-server wait-types sql-server-2016

8
推荐指数
1
解决办法
258
查看次数