问题:我在Microsoft SQL Server 2000资源工具包中读到了一个用于就应当避免使用的选项对所有数据库进行检查的存储过程。我能够理解为何应当避免使用诸如脱机、仅供DBO使用、关闭统计信息、从检查点截断日志信息这样的选项。然而,其中所包含的两个选项——autoclose和autoshrink——则令我迷惑不解。
Autoclose。 当不再需要使用时自动关闭文件似乎是一种非常明智的做法。然而,即使当我仅在企业管理器中查看数据库时,也总是能够在SQL Server的错误日志中看到有关文件打开与关闭操作的出错信息。请问在企业管理器中浏览数据库列表是否会导致某些文件被打开呢?对于那些只在导入分段区域时偶尔使用以及只在使用在线事务处理(OLTP)数据库时进行访问的数据库来说,我认为设置autoclose选项是很有意义的。SQL Server在线图书中指出,在SQL Server个人版中,autoclose选项将自动设置为YES(开启状态),而对于其它版本,该选项将被设置为NO(关闭状态)。这个选项是否真的只适用于SQL Server个人版呢?
Autoshrink。Autoshrink选项看起来同样是非常有益的。然而,在导入分段区域的过程中,由于需要在很短时间内产生大量数据,为了确保这些区域占用最小空间以便进行备份,是否应当使用autoshrink选项呢?
解答:Autoclose在SQL Server 2000的所有版本中均可使用。尽管通过使用这一选项所节省的内存空间相当有限,但是,这些空间对于在只有有限内存资源的系统上运行的SQL Server个人版来说,仍是非常重要的。然而,在其它版本的SQL Server中启用autoclose选项并非一种明智之举,这是因为,当您每次试图访问数据库时,相应的查询操作将因数据库的装载过程而变慢。至于您所提到的文件打开与关闭问题,正如您所说的那样,当您在企业管理器中列举数据库时,实际已对数据库进行了访问,因而会打开相应的文件。
在产品化系统中将autoshrink选项设置为开启状态同样并非明智之举(除非您真的需要这样做),这是因为,当您的系统正在忙于完成其它任务时,autoshrink选项可能会同时启动,从而降低系统运行速度。然而,对于那些数据库管理员无暇估计并且数据库尺寸有可能在您毫无察觉的情况下超出控制范围的桌面或远程系统来说,开启这一选项却是一种非常有效的措施。
—SQL Server开发团队
在实际使用中,使用auto shrink时,如果有大量并发用户正在使用,可能导致用户死锁,一般不建议使用auto shrink .
查看某个数据库是否设置了这个参数:USE dbname SELECT DATABASEPROPERTY('dbname', 'IsAutoShrink')
配置这个参数:exec sp_dboption 'autoshrink' 'true'