如果不是将单个大型 .mdf 文件划分为多个 (.ndf) 文件,我阅读了很多关于性能改进的信息。
但我还从文档中发现,如果在 RAID 上创建文件,则可以实现相同的改进。
那么将 .mdf 文件划分为多个文件对我来说是否有意义,或者我应该保持原样,因为它在 RAID 上?
这就是我所做的:
RESTORE DATABASE AdventureWorks2017DR FROM DISK = 'AdventureWorks2017_1220.BAK' WITH NORECOVERY
RESTORE DATABASE AdventureWorks2017DR FROM DISK = 'AdventureWorks2017_1220_DIFF.BAK' WITH NORECOVERY
错误:
Msg 3136, Level 16, State 1, Line 34
This differential backup cannot be restored because the database has not been restored to the correct earlier state.
Msg 3013, Level 16, State 1, Line 34
RESTORE DATABASE is terminating abnormally.
为什么它给我一个错误?这两个备份是最后两个。它们之间没有备份。
更新:运行命令RESTORE HEADERONLY FROM DISK
谢谢@AMtwo。你是对的。同一个文件中有多个备份。我找不到一种方法来简单地恢复它们。那可能吗?
如何知道对一个实例上的所有数据库运行数据库完整性检查需要多少时间。
我只需要它何时开始和何时完成。
我能够查询最后一次检查数据库的执行时间,但我无法查询检查数据库的持续时间。
目标是专注于最长的时间并以某种方式加快速度。
我有 2 节点 Windows 故障转移群集和仲裁磁盘。SQL 代理不是集群的资源。
我需要在服务器上启用服务代理;为此,我需要将 SQL 代理设置为脱机,运行 tsql 语句,然后将其重新联机。
但是,一旦我使用 SSMS 停止 SQL 代理,Windows 就会故障转移到被动节点。我想,因为 SQL Agent 没有在集群管理器中列为资源,所以我需要从活动节点停止它,进行更改,然后将其重新联机。
问题是:
为什么停止不属于集群的服务会导致集群故障转移?
在我的情况下,停止 SQL 代理的正确方法是什么?以维护为例
我在测试集群上模拟了相同的操作,一切正常,集群没有故障转移。相同的集群结构,但没有仲裁。
更新: 右键单击集群名称本身我可以在属性类型下看到 SQL 代理。这是否意味着所有这些资源都在集群中,即使它们在“角色”下不可见?
我想知道 SQL Server 数据库现在的健康程度(在我开始使用它之前)。
然后,在一个月左右的时间里,我想再次检查一下,看看当时的数据库有多健康,并与之前的状态进行比较。
基本上有什么方法可以让我现在和以后拍摄数据库健康状况的快照?然后看看有什么改进,这样我就可以跟踪我的进度。
任何信息来源都会很棒。
我正在考虑获得 Microsoft DBA 认证,但试图找出我应该学习的确切证书有点令人困惑。
我的公司在本地使用 SQL Server 2017,但似乎 Azure 数据库变得非常流行。那么现场会消失吗?
“MCSA:SQL 2016 数据库管理”是我需要的吗?
如果我收到“MCSA:SQL 2016 数据库管理”,我能否管理 Azure DB?那有什么不同?
谢谢
如何在执行计划中消除 Key Lookup (Clustered) 运算符?
表tblQuotes
已经有一个聚集索引(on QuoteID
)和 27 个非聚集索引,所以我试图不再创建。
我把聚集索引列QuoteID
放在我的查询中,希望它会有所帮助——但不幸的是还是一样。
或查看:
这就是 Key Lookup 运算符所说的:
询问:
declare
@EffDateFrom datetime ='2017-02-01',
@EffDateTo datetime ='2017-08-28'
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
IF OBJECT_ID('tempdb..#Data') IS NOT NULL
DROP TABLE #Data
CREATE TABLE #Data
(
QuoteID int NOT NULL, --clustered index
[EffectiveDate] [datetime] NULL, --not indexed
[Submitted] [int] NULL,
[Quoted] [int] NULL,
[Bound] [int] NULL,
[Exonerated] [int] NULL,
[ProducerLocationId] [int] NULL,
[ProducerName] [varchar](300) NULL,
[BusinessType] [varchar](50) NULL,
[DisplayStatus] [varchar](50) NULL,
[Agent] [varchar] (50) NULL,
[ProducerContactGuid] uniqueidentifier NULL
)
INSERT INTO #Data
SELECT
tblQuotes.QuoteID,
tblQuotes.EffectiveDate,
CASE WHEN lstQuoteStatus.QuoteStatusID >= 1 THEN 1 ELSE 0 END AS Submitted,
CASE WHEN lstQuoteStatus.QuoteStatusID = 2 or lstQuoteStatus.QuoteStatusID = 3 or lstQuoteStatus.QuoteStatusID = 202 THEN 1 ELSE 0 END AS Quoted,
CASE WHEN lstQuoteStatus.Bound = 1 THEN 1 ELSE 0 END AS Bound,
CASE WHEN lstQuoteStatus.QuoteStatusID = 3 THEN 1 ELSE 0 END AS Exonareted,
tblQuotes.ProducerLocationID,
P.Name + ' / '+ P.City as [ProducerName],
CASE WHEN tblQuotes.PolicyTypeID = 1 THEN 'New Business'
WHEN tblQuotes.PolicyTypeID = 3 THEN 'Rewrite'
END AS BusinessType,
tblQuotes.DisplayStatus,
tblProducerContacts.FName +' '+ tblProducerContacts.LName as Agent,
tblProducerContacts.ProducerContactGUID
FROM tblQuotes
INNER JOIN lstQuoteStatus
on tblQuotes.QuoteStatusID=lstQuoteStatus.QuoteStatusID
INNER JOIN tblProducerLocations P
On P.ProducerLocationID=tblQuotes.ProducerLocationID
INNER JOIN tblProducerContacts
ON dbo.tblQuotes.ProducerContactGuid = tblProducerContacts.ProducerContactGUID
WHERE DATEDIFF(D,@EffDateFrom,tblQuotes.EffectiveDate)>=0 AND DATEDIFF(D, @EffDateTo, tblQuotes.EffectiveDate) <=0
AND dbo.tblQuotes.LineGUID = '6E00868B-FFC3-4CA0-876F-CC258F1ED22D'--Surety
AND tblQuotes.OriginalQuoteGUID is null
select * from #Data
执行计划:
用户能够在上午 10 点之前运行报告。在同样的报告变得非常缓慢之后,有时用户只是没有耐心等待。经过一些故障排除后,我找到了导致延迟的列。它是计算列,它使用函数来获得结果。
大约在同一时间,我收到了另一个关于运行缓慢的报告,它总是运行良好。经过一些故障排除后,我发现了导致延迟的列:
where (Amount - PTD) <> 0
同样,该Amount
列是计算列。
所以我的问题是:为什么总是作为报告一部分的所有突然计算列开始显着降低性能?大约在上午 10 点之后会发生什么?如果我制作这些专栏有什么缺点persisted
?
谢谢
--FUNCTION 带来的列:
ALTER FUNCTION [dbo].[CalcInvoiceAmtPTD]
(@SInvNum INT, @entityGuid uniqueIdentifier) RETURNS MONEY
AS
BEGIN
DECLARE @Amt MONEY
declare @toplevel uniqueidentifier
set @toplevel = (select dbo.gettoplevelentity(@entityguid))
declare @t table
(
Guid uniqueidentifier
)
insert into @t select * from dbo.getlinkedentities(@toplevel) where guid is not null
declare @tbl table (amount money, glacctid int)
select @amt = isNull(sum(amount), 0) from tblfin_journalpostings jp
inner join tblfin_journal j on j.transactnum = jp.transactnum
and (voiderfor is null and voidedby is null)and j.transdescid <> 'I'
inner join tblfin_glaccounttypes glt on glt.glacctid = jp.glacctid and glt.accounttype = 'p'
inner join @t t on t.guid = jp.entityguid
where invoicenum = @SInvNum
RETURN ISNULL(@Amt , 0)
END
我在保险公司工作一年多一点,我的 SQL 经验大约 2-3 年,包括 SSIS、SSRS。我们有大约 1 TB 的数据。
是否可以自己搭建数据仓库?我应该根据我的经验这样做吗?
我可以从很多材料和 SQL 组中获得帮助。但是,还是太复杂了?
谢谢
我们正在使用第三方公司的软件,该软件与 SQL Server 数据库通信并检索和插入所有信息。
当用户使用此软件时,有时它会在特定步骤冻结。我需要对其进行故障排除并找出它发生的原因。
基本上我想使用这个 UI 软件,同时查看在我执行的每个步骤中运行的查询。
为此,我使用 SQL Profiler 查看导致此瓶颈的查询。但是,我将如何仅针对该特定软件且仅针对特定用户跟踪步骤?我不想看到所有其他信息。
我能够过滤 NTUserName,我假设它只是 UserName,对吗?
但是我怎样才能知道 ApplicationName 是什么?
如果我运行这个查询,我会看到 13 个不同的应用程序,包括 Microsoft Office、Report Server 等。它们听起来都不像我们使用的软件的名称。(MGA 系统。保险管理系统)
select distinct
program_name
from sys.dm_exec_sessions
where is_user_process = 1;