有一06年的项目,到目前为止,数据库中的单表记录数超过了一千万条记录,以前的服务器有点不适应了,外加业务上要进行些升级,因此这次更换了台服务器,服务器配置如下:

单CPU,4核心,2线程/核心。

由于现在内存不怎么贵,因此我让他们加到8G物理内存。

两块300G左右的硬盘做RAID1。

升级时,我顺便让他们买了个SQL 2008,计划从以前的2005升级到2008。

        由于不怎么想直接把2005的mdf文件附加到2008下使用,因此我在2008下重新建立了数据库文件,然后通过SQL把之前的部分数据据导入到新的数据库中。由于至少需要保留一年的数据,因此单表还有400万条记录左右。

        问题出现了,客户端运行极其慢,遍访网络各大文章,发现SQL Server无法直接使用超过2G的内存,于是做了调整,应该是可以使用超过2G的内存了(方法下方表述)。但是速度还是不行,如果直接把2005的数据文件附加进去则速度不错。从网络上偶然看到文章需要重建索引,于是查找新建数据库中的索引,发现导出脚本时并没有把索引导出,于是重新导脚本,不过一加上索引,导出就失败,没办法,之后通过手工在各个表中添加了之前建立的索引,于是速度问题解决。

SQL使用大内存方法:

  以前的服务器,由于内存的价格过高,一般配的内存不是很多,超过4G的当然就不多了.现在的服务器,配置超过4G就很多,在配作SQL 数据库服务器后,很多的人只选默认的设置,虽然可以正常使用,可是却把大量的内存给浪费(SQL服务使用的内存不会超过1.8G),系统的性能也不能因为的大内存而提升,这是很可惜的.  在本文中,我大致讲一下配置的过程.(如果服务器的内存少于4G,不用配置)(网上完全讲这个的,没有见过,随手写一个)
  1.打开系统中的大内存支持(windows)
  若要启用 Windows 2000 Advanced Server 或 Windows 2000 Datacenter Server 支持大于4GB的物理内存,必须将参数 /pae 添加到 boot.ini 文件中。
  [boot loader]
  timeout=0
  default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
  [operating systems]
  multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /fastdetect
  改为
  [boot loader]
  timeout=0
  default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
  [operating systems]
  multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /fastdetect /pae
  这个改好后,要重启系统的

  2.启用锁定内存页选项(windows)
  启用锁定内存页选项
  在"开始"菜单上单击"运行"子菜单,然后在"打开"框中键入"gpedit.msc"。
  在"组策略"控制台上,展开"计算机配置",然后展开"Windows 设置"。
  展开"安全设置",然后展开"本地策略"。
  选择"用户权限分配"复选框。
  详细资料窗格中随即显示出策略。
  在详细资料窗格中,双击"锁定内存页"。
  在"本地安全策略设置"对话框中,单击"添加"按钮。
  在"选择用户或组"对话框中,添加有权运行 sqlservr.exe 的帐户。

  3.启用SQL的AWE
  若要启用 AWE,请将 awe enabled 设置为 1。除非指定了 max server memory 的值,否则 SQL Server 将保留几乎所有可用内存,只留下 128 MB 或更少。
  如果已成功启用该选项,则当 SQL Server 2000 实例启动时,SQL Server 错误日志中将出现"已启用地址窗口扩展"这条消息。
  awe enabled 是高级选项。如果正在使用 sp_configure 系统存储过程更改该设置,则只有当 show advanced options 设置为 1 时才能更改 awe enabled。
  code 如下,设定SQL 使用6G的内存
  sp_configure 'show advanced options',1
  RECONFIGURE
  GO
  sp_configure 'awe enabled',1
  RECONFIGURE
  GO
  sp_configure 'max server memory',6144
  RECONFIGURE
  GO

  必须重新启动 SQL Server 2000 实例才能使更改生效。
  net stop mssqlserver
  net start mssqlserver
  这样,SQL 服务启动后,就会把6G的内存给锁定,完全供SQL使用参照SQL帮助文件

注:也可以通过SQL Server的属性,进入内存属性页中启动AWE,不过我还是通过脚本启动了。脚本启动需要单步执行,不可所有一起执行,看执行状态之后决定下一步的方案。

重建索引的方法

USE DatabaseName --Enter the name of the database you want to reindex
DECLARE @TableName varchar(255)
DECLARE TableCursor CURSOR FOR
 SELECT table_name FROM information_schema.tables
  WHERE table_type = 'base table'
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
 DBCC DBREINDEX(@TableName,' ',90)
 FETCH NEXT FROM TableCursor INTO @TableName
END 

CLOSE TableCursor
DEALLOCATE TableCursor
 

具体的脚本可能会根据不同的版本有差异