技术开发 频道

SQL问题与解答:数据库移动、备份和镜像

    【IT168 评论】新阵列移动日

  问:我们当前的 RAID 很快就填满了,因此需要将一些 SQL Server 2005 数据库移到其他位置。新阵列已准备就绪,并且我一直在为移动数据库作准备。我刚刚发现其中一个数据库是事务复制发布服务器,我知道这表示我不能移动该数据库。我应怎样做?

  答:对您来说有一个好消息 - 只有 SQL Server 2000(和更早版本)具有以下局限性:限制在未重新初始化事务复制或直接更改各种系统表的情况下移动发布数据库。

  对于 SQL Server 2005 和 SQL Server 2008,有一个记录下来的过程,您可以按照它移动数据库,而不必对事务复制执行任何操作,但要求数据库保持连接到同一 SQL Server 实例。移动时必须停机一段时间,因为当数据库文件仍处于联机状态时无法将其移动。过程如下:

  首先,使用下面的代码使数据库脱机。如果有用户连接到数据库,则需要先断开这些用户的连接,此过程才能成功:

ALTER DATABASE MyDatabaseName SET OFFLINE;

 

  接着,将数据文件复制到新位置。使用复制而不是移动,可在发生任何错误时进行快速回滚(否则,必须执行还原)。然后,使用以下代码告知 SQL Server 每个文件的新位置:

ALTER DATABASE MyDatabaseName
MODIFY FILE
   (NAME
= N'LogicalFileName',
   FILENAME = N'pathname\filename');

 

  物理上复制了所有文件并更新了 SQL Server 中的文件位置后,使用以下代码使数据库恢复联机状态:

ALTER DATABASE MyDatabaseName SET ONLINE;

 

  关闭页锁存

  问:我在理解一些性能优化相关概念时存在疑问。我几次读到需要防止“页锁存”问题。我不知道“页”或“锁存”是什么意思,或者说为什么页锁存甚至是一个问题。您能解释所有这些疑问吗?

  答:SQL Server 数据库中的所有数据都存储在数据文件中。在内部,这些文件组织成大小为 8 KB 的数据块序列,称为页。页是 SQL Server 可以管理的基本存储和 I/O 单位。页通常位于磁盘上的数据文件中,并且在处理任何查询之前,需要 SQL Server 的缓存(称为缓冲池)来进行读取。

  SQL Server 使用各种页来存储不同类型的关系数据(例如,表中的行、非群集索引中的行或者文本/LOB 数据)。还有一些页存储 SQL Server 组织和访问存储关系数据的页所需的内部数据结构部分。

  锁存 是一种轻量级内部机制,SQL Server 使用它来同步对缓存内的某个页的访问。您需要注意两种类型的页锁存 - 常规页锁存 和页 I/O 锁存。如果 SQL Server 线程必须等待获取其中一个锁存,则表示出现性能问题。

  当 SQL Server 正等待从磁盘中读取数据文件的某部分时,则可能会导致页 I/O 锁存等待。如果页 I/O 锁存持续很长时间,则通常表明底层磁盘子系统出现性能问题(即,该子系统过载)。

  当 SQL Server 中的多个线程尝试访问内存中的相同 8 KB 数据文件页时,就存在对该页访问权的争用,这可能会导致页锁存等待。最常见的这种情况涉及大量使用 tempdb 数据库中的临时小对象。

  有关如何监视和减少页锁存等待的更深入说明不属于本专栏文章的范围,但您可以在以下资料中找到更多信息:

  · SQL Server 2008 联机丛书中的“SQL Server Wait Statistics 对象”部分,它说明如何使用系统监视器监视等待统计数据。

  · SQL Server 2008 联机丛书中的“sys.dm_os_wait_stats”部分,它列出了常见的 SQL Server 等待类型及其含义,并说明如何从 SQL Server 内部监视等待统计数据。

  · 白皮书《SQL Server 2008 中的性能问题故障排除》,它提供各种故障排除查询和技术,包括等待统计数据。  

点击查看更多TechNet精彩文章 

0
相关文章