Questions tagged «maintenance»

在数据库的上下文中,维护描述了围绕数据库系统的例行操作任务,例如监视,调整和备份过程。


5
什么时候可以收缩数据库?
我知道收缩是魔鬼:它会颠倒页面顺序,并导致皮肤癌,数据碎片和全球变暖。清单还在继续……也就是说,我有一个100 GB的数据库,我删除了50 GB的数据-不是在一个表上,而是在数据库范围内对旧数据进行一般修剪,覆盖了90%的数据。表-这是否构成缩小数据库的合适用例? 如果不是,那么从数据库中删除如此高的数据百分比后,应采取哪些适当的步骤来清理房屋?我可以想到两个:重建索引和更新统计信息。还有什么?

5
SQL Server维护计划-任务和计划的最佳实践
我的任务是为Sql Server 2005数据库设计维护计划。我知道要进行备份,我想每15分钟执行一次每日完整数据库备份和事务日志备份。我的问题在于弄清楚我想完成哪些其他任务以及应该多久执行一次。 因此,到目前为止,我已经牢记这一点。如果我的想法有任何缺陷或更好的解决方法,请纠正我。 备份-所有表,完整备份(每天) 备份-选定表,完整备份(每小时) 备份-事务日志(每15分钟) 检查数据库完整性(每天) 重组索引(每天) 更新统计信息(每天) 缩小数据库(每周一次) 重建指数(每周) 维护清理(每天) 我记得有一段时间读过(当我在另一份工作中制定类似计划时),其中一些任务不需要每天运行或不应该每天运行。至于哪一个,它逃脱了我。我可以使用一些指导来创建更好的维护计划,以减少灾难中的数据丢失,但在高峰时段运行时不会增加系统负担(也可以提高性能)。

2
何时更新统计信息?
我继承了执行以下任务的维护计划: 清理旧数据 检查数据库完整性 执行数据库和事务日志备份 重组我们的索引 更新统计 删除旧的备份和维护计划文件 在23分钟的维护计划中,更新统计信息需要花费惊人的13分钟。在这13分钟内,对数据库的访问被阻止(或至少暂停了从该数据库到我们其他数据库的复制)。 我的问题是: 我们什么时候应该更新统计信息,为什么? 这似乎是我们每天应该减少的工作频率。我试图让我们摆脱“不必要”维护不必要的思维定势。

1
为BACKUP命令设置BUFFERCOUNT,BLOCKSIZE和MAXTRANSFERSIZE
我找了实际指导的设定值BUFFERCOUNT,BLOCKSIZE以及MAXTRANSFERSIZE该的BACKUP命令。我做了一些研究(见下文),做了一些测试,并且我完全意识到,任何真正有价值的答案都将以“嗯,这取决于……”开始。我对已经完成的测试以及在我发现的任何资源中显示的测试的担忧(请参见下面的方法)是测试是在真空中完成的,很可能是在没有其他负载的系统上进行的。 我对基于长期经验的这三个选项的正确指导/最佳实践感到好奇:数周或数月的许多数据点。我并没有在寻找特定的值,因为这主要是可用硬件的功能,但是我想知道: 各种硬件/负载因素如何影响应采取的措施。 在任何情况下都不应该覆盖这些值吗? 是否有一些陷阱可以覆盖所有这些并非立即显而易见的陷阱?占用过多的内存和/或磁盘I / O?还原操作复杂吗? 如果我有一台运行着多个SQL Server实例的服务器(一个默认实例和两个命名实例),并且如果我同时运行所有3个实例的备份,那么除了确保集合(BUFFERCOUNT* MAXTRANSFERSIZE)没有超过可用的RAM?可能的I / O争用? 在将三个实例放在一台服务器上并再次在所有三个实例上同时运行备份的相同场景中,在每个实例内同时运行多个数据库的备份又将如何影响这些值的设置?这意味着,如果三个实例中的每个实例每个都有100个数据库,则每个实例每个实例同时运行2或3个备份,这样就可以同时运行6到9个备份。(在这种情况下,我有许多中小型数据库,而不是几个大型数据库。) 到目前为止,我收集了以下内容: BLOCKSIZE: 支持的大小为512、1024、2048、4096、8192、16384、32768和65536(64 KB)字节。[1] 磁带设备的默认值为65536,否则为512 [1] 如果要备份要复制到CD-ROM并从CD-ROM还原的备份,请指定BLOCKSIZE = 2048 [1] 当您写入单个磁盘时,默认值为512就可以了。如果使用RAID阵列或SAN,则必须进行测试以查看默认值还是65536更好。[13(第18页)] 如果手动设置,则该值必须> =用于创建数据文件的块大小,否则将出现以下错误: 消息3272,级别16,状态0,第3行 'C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ Backup \ BackupTest.bak'设备的硬件扇区大小为4096,但是block size参数指定不兼容的覆盖值512。使用兼容的块大小重新发出该语句。 BUFFERCOUNT: 默认值[2],[8]: SQL Server 2005及更高版本: (NumberofBackupDevices * …


5
重新启动SQL Server会加快速度吗?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 8年前。 我注意到一些DBA非常频繁地重新启动SQL Server,有时甚至每晚重新启动一次。我相信他们这样做是为了释放一些内存,或者也可能加快查询速度。我知道重启后必须重新编译查询计划,但是即使包括在内,我也想知道这种做法是否有净收益。 每天重新启动SQL Server会使其运行速度更快吗?

1
VACUUM将磁盘空间返回给操作系统
VACUUM除某些特殊情况外,通常不会将磁盘空间返回给操作系统。 从文档: 标准形式的VACUUM删除表和索引中的死行版本,并标记可用于将来重用的空间。但是,它不会将空间返回给操作系统,除非在特殊情况下,表末尾的一个或多个页面变得完全空闲,并且可以轻松获得独占表锁。相反,VACUUM FULL通过编写没有死角的表文件的全新版本来主动压缩表。这样可以最大程度地减少表的大小,但是会花费很长时间。在操作完成之前,表的新副本还需要额外的磁盘空间。 问题是:如何实现该数据库状态one or more pages at the end of a table become entirely free?可以通过完成此操作VACUUM FULL,但是我没有足够的空间来实现它。那么还有其他可能性吗?



2
为什么没有DELETE + REORG可用磁盘空间(DB2)?
在DB2中,我有一个包含大型二进制数据的表。现在,我清除了整个表并运行runstats,reorg,runstats,但是所占用的磁盘空间没有改变。这有什么问题吗? 该表位于自己创建的表空间中,如下所示: CREATE BUFFERPOOL "MY_BP" SIZE 250 AUTOMATIC PAGESIZE 4096; CREATE LARGE TABLESPACE MY_TBS IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 64 PREFETCHSIZE 64 BUFFERPOOL MY_BP OVERHEAD 10.500000 TRANSFERRATE 0.140000 FILE SYSTEM CACHING; 我删除/重组如下: DELETE FROM MY_TBL RUNSTATS ON TABLE MY_TBL WITH DISTRIBUTION AND DETAILED …

1
为什么不重建页数小于1000的索引?
我使用Ola Hallengrens脚本进行索引维护。在此之前,我使用以下查询来查看哪些索引最分散: SELECT dbschemas.[name] as 'Schema', dbtables.[name] as 'Table', dbindexes.[name] as 'Index', indexstats.avg_fragmentation_in_percent, indexstats.page_count FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id] INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id] INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id] AND indexstats.index_id …

2
在调用数据库上下文中执行的中央存储过程
我正在使用该sys.dm_db_index_physical_stats视图开发定制的维护解决方案。我目前有从存储过程中引用它。现在,当该存储过程在我的一个数据库上运行时,它会执行我想要的操作,并拉出与任何数据库有关的所有记录的列表。当我将其放置在其他数据库上时,它会拉出仅与该数据库有关的所有记录的列表。 例如(底部代码): 针对数据库6的查询运行显示了[请求的]数据库1-10的信息。 针对数据库3运行的查询仅显示数据库3的[请求的]信息。 我要对数据库3专门执行此过程的原因是,我希望将所有维护对象保留在同一数据库中。我想把这项工作放在维护数据库中,就像在该应用程序数据库中一样工作。 码: ALTER PROCEDURE [dbo].[GetFragStats] @databaseName NVARCHAR(64) = NULL ,@tableName NVARCHAR(64) = NULL ,@indexID INT = NULL ,@partNumber INT = NULL ,@Mode NVARCHAR(64) = 'DETAILED' AS BEGIN SET NOCOUNT ON; DECLARE @databaseID INT, @tableID INT IF @databaseName IS NOT NULL AND @databaseName NOT IN ('tempdb','ReportServerTempDB') BEGIN …


4
如何在维护计划作业中更改或更新本地服务器连接
两天前,我们的客户更改了我们的Dev Server名称之一 重命名服务器后,由于服务器名称不匹配,所有我的维护作业和其他作业都失败了。 我们正在使用sql server 2012版本和 Server 2008 OS 所以今天早上我将我的Sql Server 2012名称重命名为更新的给定名称,并进行了表,程序更新 我试图在维护作业中更新本地服务器连接,但是无法编辑。然后我添加了新的服务器连接,但仍无用,执行作业时出现错误。 我尝试了作业属性选项中的目标页面后,也仅选择了目标服务器,并且禁用了多个目标服务器。 错误如下 以用户身份执行:NT Service \ SQLSERVERAGENT。用于64位版权(C)Microsoft Corporation的Microsoft(R)SQL Server执行软件包实用程序版本11.0.2100.60。版权所有。 开始时间:12:01:28 AM错误:2013-12-16 00:01:43.98代码:0xC00291EC源:{410F7661-F71A-4B68-9584-BA422AB00F02}执行SQL任务 说明:无法获取连接“本地服务器连接” 。连接可能配置不正确,或者您对此连接没有正确的权限。结束错误 错误:2013-12-16 00:02:00.00 代码:0xC0024104 源:Territory_Update 说明:任务上的Execute方法返回错误代码0x80131904(建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。找不到服务器或无法访问该服务器。请验证实例名称是否正确以及该实例名称是否正确。 SQL Server配置为允许远程连接(提供程序:命名管道提供程序,错误:40-无法打开与SQL Server的连接)。Execute方法必须成功,并使用“ out”参数指示结果。结束错误 错误:2013-12-16 00:02:15.00 代码:0xC0024104 源:{4E2AF328-0B8D-4905-83BE-839FDDEFC09C} 说明:任务上的Execute方法返回错误代码0x80131904(建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。找不到服务器或无法访问该服务器。请验证实例名称是否正确以及该实例名称是否正确。 SQL Server配置为允许远程连接(提供程序:命名管道提供程序,错误:40-无法打开与SQL Server的连接)。Execute方法必须成功,并使用“ out”参数指示结果。 结束错误DTExec:程序包执行返回DTSER_FAILURE(1)。 开始:12:01:28 AM 完成:12 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.