网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

解决SQL慢的问题(邹建)

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
--首先,用下面的语句,检查/修复数据库/并整理索引碎片(需要比较长的时间,请在系统空闲时进行此工作)
    USEMASTER
    GO
    sp_dboption'你的数据库名','singleuser','true'
    Go
    DBCCCHECKDB('你的数据库名',REPAIR_REBUILD)
    Go
    USE你的数据库名
    go
    execsp_msforeachtable'DBCCCHECKTABLE(''?'',REPAIR_REBUILD)'
    execsp_msforeachtable'DBCCDBREINDEX(''?'')'
    go
    sp_dboption'你的数据库名','singleuser','false'
    Go
    再看看是否配置上可以做一定优化
    3.优化tempdb性能
    对tempdb数据库的物理位置和数据库选项设置的一般建议包括:
    使tempdb数据库得以按需自动扩展。这确保在执行完成前不终止查询,该查询所生成的存储在tempdb数据库内的中间结果集比预期大得多。
    将tempdb数据库文件的初始大小设置为合理的大小,以避免当需要更多空间时文件自动扩展。如果tempdb数据库扩展得过于频繁,性能会受不良影响。
    将文件增长增量百分比设置为合理的大小,以避免tempdb数据库文件按太小的值增长。如果文件增长幅度与写入tempdb数据库的数据量相比太小,则tempdb数据库可能需要始终扩展,因而将妨害性能。
    将tempdb数据库放在快速I/O子系统上以确保好的性能。在多个磁盘上条带化tempdb数据库以获得更好的性能。将tempdb数据库放在除用户数据库所使用的磁盘之外的磁盘上。有关更多信息,请参见扩充数据库。
    4.优化服务器:
    使用内存配置选项优化服务器性能
    Microsoft&;reg;SQLServer&;#8482;2000的内存管理组件消除了对SQLServer可用的内存进行手工管理的需要。SQLServer在启动时根据操作系统和其它应用程序当前正在使用的内存量,动态确定应分配的内存量。当计算机和SQLServer上的负荷更改时,分配的内存也随之更改。有关更多信息,请参见内存构架。
    下列服务器配置选项可用于配置内存使用并影响服务器性能:
    minservermemory
    maxservermemory
    maxworkerthreads
    indexcreatememory
    minmemoryperquery
    minservermemory服务器配置选项可用于确保SQLServer在达到该值后不会释放内存。可以基于SQLServer的大小及活动将该配置选项设置为特定的值。如果选择设置此选项,必须为操作系统和其他程序留出足够的内存。如果操作系统没有足够的内存,会向SQLServer请求内存,从而导致影响SQLServer性能。
    maxservermemory服务器配置选项可用于:在SQLServer启动及运行时,指定SQLServer可以分配的最大内存量。如果知道有多个应用程序与SQLServer同时运行,而且想保障这些应用程序有足够的内存运行,可以将该配置选项设置为特定的值。如果这些其它应用程序(如Web服务器或电子邮件服务器)只根据需要请求内存,则SQLServer将根据需要给它们释放内存,因此不要设置maxservermemory服务器配置选项。然而,应用程序通常在启动时不假选择地使用可用内存,而如果需要更多内存也不请求。如果有这种行为方式的应用程序与SQLServer同时运行在相同的计算机上,则将maxservermemory服务器配置选项设置为特定的值,以保障应用程序所需的内存不由SQLServer分配出。
    不要将minservermemory和maxservermemory服务器配置选项设置为相同的值,这样做会使分配给SQLServer的内存量固定。动态内存分配可以随时间提供最佳的总体性能。有关更多信息,请参见服务器内存选项。
    maxworkerthreads服务器配置选项可用于指定为用户连接到SQLServer提供支持的线程数。255这一默认设置对一些配置可能稍微偏高,这要具体取决于并发用户数。由于每个工作线程都已分配,因此即使线程没有正在使用(因为并发连接比分配的工作线程少),可由其它操作(如高速缓冲存储器)更好地利用的内存资源也可能是未使用的。一般情况下,应将该配置值设置为并发连接数,但不能超过32727。并发连接与用户登录连接不同。SQLServer实例的工作线程池只需要足够大,以便为同时正在该实例中执行批处理的用户连接提供服务。如果增加工作线程的数量超过默认值,会降低服务器性能。有关更多信息,请参见maxworkerthreads选项。
    说明当SQLServer运行在MicrosoftWindows&;reg;98上时,最大工作线程服务器配置选项不起作用。
    indexcreatememory服务器配置选项控制创建索引时排序操作所使用的内存量。在生产系统上创建索引通常是不常执行的任务,通常调度为在非峰值时间执行的作业。因此,不常创建索引且在非峰值时间时,增加该值可提高索引创建的性能。不过,最好将minmemoryperquery配置选项保持在一个较低的值,这样即使所有请求的内存都不可用,索引创建作业仍能开始。有关更多信息,请参见indexcreatememory选项。
    minmemoryperquery服务器配置选项可用于指定分配给查询执行的最小内存量。当系统内有许多查询并发执行时,增大minmemoryperquery的值有助于提高消耗大量内存的查询(如大型排序和哈希操作)的性能。不过,不要将minmemoryperquery服务器配置选项设置得太高,尤其是在很忙的系统上,因为查询将不得不等到能确保占有请求的最小内存、或等到超过querywait服务器配置选项内所指定的值。如果可用内存比执行查询所需的指定最小内存多,则只要查询能对多出的内存加以有效的利用,就可以使用多出的内存。有关更多信息,请参见minmemoryperquery选项和querywait选项。
    使用I/O配置选项优化服务器性能
    下列服务器配置选项可用于配置I/O的使用并影响服务器性能:
    recoveryinterval
    recoveryinterval服务器配置选项控制Microsoft&;reg;SQLServer&;#8482;2000在每个数据库内发出检查点的时间。默认情况下,SQLServer确定执行检查点操作的最佳时间。然而,若要确定这是否为适当的设置,需要使用WindowsNT性能监视器监视数据库文件上的磁盘写入活动。导致磁盘利用率达到100%的活动尖峰值会妨害性能。若更改该参数以使检查点进程较少出现,通常可以提高这种情况下的总体性能。但仍须继续监视性能以确定新值是否已对性能产生正面影响。有关更多信息,请参见recoveryinterval选项。
    5.优化数据库文件
    分区
    将数据库分区可提高其性能并易于维护。通过将一个大表拆分成更小的单个表,只访问一小部分数据的查询可以执行得更快,因为需要扫描的数据较少。而且可以更快地执行维护任务(如重建索引或备份表)。
    实现分区操作时可以不拆分表,而将表物理地放置在个别的磁盘驱动器上。例如,将表放在某个物理驱动器上并将相关的表放在与之分离的驱动器上可提高查询性能,因为当执行涉及表之间联接的查询时,多个磁头同时读取数据。可以使用Microsoft&;reg;SQLServer&;#8482;2000文件组指定将表放置在哪些磁盘上。
    硬件分区
    硬件分区将数据库设计为利用可用的硬件构架。硬件分区的示例包括:
    允许多线程执行的多处理器,使得可以同时执行许多查询。换句话说,在多处理器上可以同时执行查询的各个组件,因此使单个查询的速度更快。例如,查询内引用的每个表可同时由不同的线程扫描。
    RAID(独立磁盘冗余阵列)设备允许数据在多个磁盘驱动器中条带化,使更多的读/写磁头同时读取数据,因此可以更快地访问数据。在多个驱动器中条带化的表一般比存储在一个驱动器上的相同的表扫描速度要快。换句话说,将表与相关的表分开存储在不同的驱动器上可以显著提高联接那些表的查询的性能。
    水平分区
    水平分区将一个表分段为多个表,每个表包含相同数目的列和较少的行。例如,可以将一个包含十亿行的表水平分区成12个表,每个小表代表特定年份内一个月的数据。任何需要特定月份数据的查询只引用相应月份的表。
    具体如何将表进行水平分区取决于如何分析数据。将表进行分区是为了使查询引用尽可能少的表。否则,查询时须使用过多的UNION查询来逻辑合并表,而这会削弱查询性能。有关查询水平分区的表的更多信息,请参见视图使用方案。
    常用的方法是根据时期/使用对数据进行水平分区。例如,一个表可能包含最近五年的数据,但是只定期访问本年度的数据。在这种情况下,可考虑将数据分区成五个表,每个表只包含一年的数据。
    垂直分区
    垂直分区将一个表分段为多个表,每个表包含较少的列。垂直分区的两种类型是规范化和行拆分。
    规范化是个标准数据库进程,该进程从表中删除冗余列并将其放到次表中,次表按主键与外键的关系链接到主表。
    行拆分将原始表垂直分成多个只包含较少列的表。拆分的表内的每个逻辑行与其它表内的相同逻辑行匹配。例如,联接每个拆分的表内的第十行将重新创建原始行。
    与水平分区一样,垂直分区使查询得以扫描较少的数据,因此提高查询性能。例如有一个包含七列的表,通常只引用该表的前四列,那么将该表的后三列拆分到一个单独的表中可获得性能收益。
    应谨慎考虑垂直分区操作,因为分析多个分区内的数据需要有联接表的查询,而如果分区非常大将可能影响性能。
    
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师