如果我需要还原涉及复制的数据库,我需要牢记哪些注意事项?
我们确实为 SQL Server 2008 r2 express 制定了一些维护计划。如果任何表的页数超过 50 并且平均碎片超过 20,我们每个月都会对数据库进行碎片整理。
如果数据库日志大小>2MB,则恢复模式为简单,收缩,恢复模式重新设置为FULL。如果 Page_count>50 且 avg_fragmentation_in_percent > 30,则索引为 REBUILD。
如果 Page_count>50 且 avg_fragmentation_in_percent > 5 且 <30,则索引为 REORGANIZE。
这就是我们目前正在做的事情。但是我们发现自增长事件是资源密集型的,不应重复发生。现在,对于所有数据库,mdf 文件的自动增长设置为 MB,ldf 文件设置为 10%,这是创建新数据库时的默认值。我们计划根据每天变大的数据库数量来增加数据库的自动增长值。但是我想知道有多少自动增长事件对数据库来说是理想的。我应该设置自动增长以便它每天、每周或每月等只发生一次吗?所以请帮助我为我的数据库设置自动增长值。还有另一个问题,如果我每月对数据库进行碎片整理,那么它就会缩小。因此,在此之后,对于所有我确实收缩过的数据库,在写入新数据时都会发生一次自动增长。所以会有很多自动增长事件。那么会不会有问题呢?请告诉我一个解决方案。
我有以下查询,它告诉我我负责的数据库中查询的状态(尽管我不是 DBA)。
SELECT
T3.FullStatement as FullSQLStatement
,T3.ExecutingStatement
,req.session_id as SessionId
,T2.login_name as LoginName
,command as SQLCommand
,start_time as StartTime
,DateDiff(MINUTE,start_time,GetDate()) as ElapsedTimeMinutes
,req.status as QueryStatus
,req.wait_type as WaitType
,req.wait_time as WaitTimeMs
,blocking_session_id as BlockingSessionId
,req.row_count as [RowCount]
,req.cpu_time as CpuTimeMs
,req.total_elapsed_time as TotalElapsedTimeMs
,SubString(sqltext.TEXT,req.statement_start_offset,req.statement_end_offset-req.statement_start_offset)
FROM sys.dm_exec_requests req
Inner Join sys.dm_exec_sessions T2 ON T2.session_id = req.session_id
Cross Apply dbo.GetExecutingSQLStatement (req.session_id) T3
Cross Apply sys.dm_exec_sql_text(sql_handle) AS sqltext
where req.database_id = 5
Order By 6 Desc
Run Code Online (Sandbox Code Playgroud)
它生成的输出部分如下所示:
尽管它在我包含的示例中没有很好地显示,但 start_time 是完整语句的开始时间,而不是语句的执行部分。有什么地方可以获取执行部分的开始时间以及完整语句的开始时间。这对我很重要,因为很明显,一个完整的语句可能有许多单独的查询。
我有一个带有 5 个实例的生产盒。
版本:SQL Server 2014 SP3 企业版。
我发现即使机器分配了大约 400GB 的内存,所有 5 个实例的组合MAX MEMORY设置也小于 200GB。
实例不会受到内存压力的影响,但是由于我们已经分配了该内存,所以不使用它是一种浪费。
我想将其增加到更高的值,为操作系统保留 10%(某些实例的分配将高于其他实例)。
不过,我以前从来没有对这个设置做过这么大的增加。
我知道这是一个不需要重启的动态设置,但是,我想知道以下几点:
我们没有启用内存设置中的锁定页面,也没有启用跟踪标志 834。
昨晚某些数据库的备份失败。正在使用 CommVault. 以下是 SQL Server 日志中的错误消息
01/05/2016 23:03:58,spid58,Unknown,BackupVirtualDeviceFile::SendFileInfoBegin:备份设备“{051A54E1-01B8-4F24-BCB3-A63A7B43D100}5”失败。操作系统错误 995(无法检索此错误的文本。原因:15105)。01/05/2016 23:03:58,spid58,未知,错误:18210 严重性:16 状态:1。
01/05/2016 23:03:58,spid59,Unknown,BackupVirtualDeviceFile::SendFileInfoBegin:备份设备“{051A54E1-01B8-4F24-BCB3-A63A7B43D100}7”失败。操作系统错误 995(无法检索此错误的文本。原因:15105)。01/05/2016 23:03:58,spid59,未知,错误:18210 严重性:16 状态:1。
01/05/2016 23:03:58,spid61,Unknown,BackupVirtualDeviceFile::SendFileInfoBegin:备份设备“{051A54E1-01B8-4F24-BCB3-A63A7B43D100}6”失败。操作系统错误 995(无法检索此错误的文本。原因:15105)。01/05/2016 23:03:58,spid61,未知,错误:18210 严重性:16 状态:1。
01/05/2016 23:03:58,spid63,Unknown,BackupVirtualDeviceFile::SendFileInfoBegin: 备份设备失败“{051A54E1-01B8-4F24-BCB3-A63A7B43D100}9”。操作系统错误 995(无法检索此错误的文本。原因:15105)。01/05/2016 23:03:58,spid63,未知,错误:18210 严重性:16 状态:1。
01/05/2016 23:03:58,spid57,Unknown,BackupVirtualDeviceFile::SendFileInfoBegin:备份设备“{051A54E1-01B8-4F24-BCB3-A63A7B43D100}4”失败。操作系统错误 995(无法检索此错误的文本。原因:15105)。01/05/2016 23:03:58,spid57,未知,错误:18210 严重性:16 状态:1。
01/05/2016 23:03:58,spid62,Unknown,BackupVirtualDeviceFile::SendFileInfoBegin: 备份设备失败“{051A54E1-01B8-4F24-BCB3-A63A7B43D100}8”。操作系统错误 995(无法检索此错误的文本。原因:15105)。01/05/2016 23:03:58,spid62,未知,错误:18210 严重性:16 状态:1。
01/05/2016 23:03:58,Backup,Unknown,BACKUP 未能完成命令 BACKUP DATABASE master。检查备份应用程序日志以获取详细消息。01/05/2016 23:03:58,备份,未知,错误:3041 严重性:16 状态:1。
01/05/2016 23:03:58,Backup,Unknown,BACKUP 未能完成命令 BACKUP DATABASE SUNDOMAIN_WLD。检查备份应用程序日志以获取详细消息。01/05/2016 23:03:58,备份,未知,错误:3041 严重性:16 状态:1。
01/05/2016 23:03:58,Backup,Unknown,BACKUP 未能完成命令 BACKUP DATABASE db1_TST。检查备份应用程序日志以获取详细消息。01/05/2016 23:03:58,备份,未知,错误:3041 严重性:16 状态:1。
01/05/2016 23:03:58,Backup,Unknown,BACKUP 未能完成命令 BACKUP DATABASE msdb。检查备份应用程序日志以获取详细消息。01/05/2016 23:03:58,备份,未知,错误:3041 严重性:16 …
我对内存中的锁定页面进行了一些研究,仍然困扰我的问题是(我知道这确实取决于您的规范,但是)是否仍然建议在 SQL Server 2017 中锁定页面,就像在 SQL Server 2005、2008 等中一样.?
我有一个大小为 11TB 的数据库。我最近从这个数据库中截断了超过 5TB 的数据。
(我完全熟悉您通常不会收缩数据库的所有原因)
我很好奇 DBCC SHRINKFILE 命令实际上在做什么,因为当我运行该命令来缩小一个大小约为 650000MB 且可用空间为 45% 的文件时,它似乎实际上并没有移动任何页面。
有问题的代码是:
USE [CAF]
GO
DBCC SHRINKFILE (N'FILENAME' , 650239)
GO
Run Code Online (Sandbox Code Playgroud)
当我在执行 DBCC SHRINKFILE 时监视服务器的性能指标时,我看到以下内容
即使我告诉 DBCC SHRINKFILE 将文件缩小 1 MB 并让它运行 30 分钟,它也不会完成。
我读过的所有内容都表明 DBCC SHRINKFILE 应该从文件末尾获取页面并将它们移动到开头附近的可用空间,但即使在最差的性能下,移动 1MB 的页面也不会超过几分钟
DBCC SHRINKFILE 实际上在做什么,对我来说没有意义?
我正在寻找有关使用以下配置在 SQL Server 实例中设置 MAXDOP 的确认/指导:
版本:SQL Server 2008 R2 标准版处理器:2 x AMD Opteron(TM) 处理器 6234 = 24 核启用超线程
对于这个处理器,每个单独的插槽都有两个 NUMA 节点,每个节点都有 6 个内核。Microsoft 的知识库文章“最大并行度”配置选项的建议和指南 ( http://support.microsoft.com/kb/2806535 ) 建议“对于已配置 NUMA 并启用超线程的服务器,MAXDOP 值不应超过每个 NUMA 节点的物理处理器数量。” 所以我想将 MAXDOP 设置为 6(一个 NUMA 节点中的内核数。)
然而,微软关于最大并行度选项的文档http://technet.microsoft.com/en-us/library/ms181007(v=SQL.105).aspx告诉我可以用于 MAXDOP 的最大值SQL Server 2008 R2 标准版为 4。
所以,我猜测 MAXDOP 4 的版本推荐覆盖了 MAXDOP=6 的处理器/NUMA 推荐?其他任何人都有这种配置并且知道如果我尝试将 MAXDOP 设置为 6 会发生什么?
我正在使用 SQL Server 2008 R2。我statDB在主文件组中有一个100 GB的表。
我在同一个数据库 ( Lab1) 中创建了一个辅助文件组并创建了一个表copyStatDB。
现在我开始将表数据从主文件组复制到辅助文件组。
我注意到我的TempDB大小没有改变,我的.LDF文件大小也没有改变。
我很惊讶地看到,因为根据我的理解,当我们执行 Insert 语句时,它应该先增加.LDF文件大小,然后再将数据复制到我的.NDF文件中。
使用 SQL Server 2012 64 位 (v11.0.6020.0 - 2012 SP3)
下面是场景:
在我们的生产中,我们安装了 32 GB DDR3 RAM:
SQL Server 中的最大内存限制已设置为 16 GB,即 50% 容量:
当我启动任务管理器并检查内存占用的值时,它显示 16 GB,这是正确的:
但是当我选择百分比占用的内存时,它显示 80%-85% 这是不正确的:
这将继续增加,直到它占据超过 95% 并且
解决此问题的唯一方法是重新启动服务器
我的问题是
sql-server ×9
backup ×2
memory ×2
shrink ×2
dmv ×1
errors ×1
maintenance ×1
maxdop ×1
replication ×1
restore ×1