Cloud数据库优化数据库在长时间运行之后会产生一些索引碎片,大量的插入删除会导致统计信息不准确,导致执行计划不合理,执行效率低,数据库文件增大,导致IO性能降低,创建维护计划优化数据库定期执行优化对提升数据库性能有很大帮助,下面介绍怎样创建一个常用的维护计划用于优化数据库。一、SqlServer数据库优化1、启动【sqlserverManagementStudio】,在【对象资源管理器】窗口里选择【SQLServer代理】-【作业】-【新增作业】。如果SQLServer代理没有启用请先启用。2、选择到【步骤】,新建作业步骤,写上步骤名称,选择类型为T_SQL,选择对应需要优化的数据库,在命令框中输入执行存储过程execRebuildIndex_UpdateSTATISTICS3、选择【高级】,成功时要执行的操作改为【退出报告成功的作业】4、创建存储过程,复制以下脚本到SQLServer里面执行,USE[CB1608]中的“CB1608”改为需要优化的数据库USE[CB1608]GO/******Object:StoredProcedure[dbo].[RebuildIndex_UpdateSTATISTICS]ScriptDate:--/******--Object:StoredProcedure[dbo].[RebuildIndex_UpdateSTATISTICS]ScriptDate:--SETANSI_NULLSON--GO--SETQUOTED_IDENTIFIERON--GOcreatePROCEDURE[dbo].[RebuildIndex_UpdateSTATISTICS]asbegin--重建索引declare@SqlStrnvarchar(max)set@SqlStr=''select@SqlStr=@SqlStr++'alterindexallon'+name+'rebuild;'fromsysobjectswherextype='U'and(namelike'T_%')and(namenotlike'TMP%')exec(@SqlStr)--更新统计信息declare@SqlStr1nvarchar(max)set@SqlStr1=''select@SqlStr1=@SqlStr1++'UPDATESTATISTICS'+name+';'fromsysobjectswherextype='U'and(namelike'T_%')and(namenotlike'TMP%')exec(@SqlStr1)--收缩数据库declare@SqlStr2nvarchar(max)set@SqlStr2=''select@SqlStr2=@SqlStr2++'ALTERTABLE'+name+'rebuildWITH(DATA_COMPRESSION=ROW);'fromsysobjectswherextype='U'and(namelike'T_%')and(namenotlike'TMP%')exec(@SqlStr2)endexec[RebuildIndex_UpdateSTATISTICS]5、设置计划,自动定时执行的时间,切换到【计划】选项,新增作业计划,选择重复执行,可以根据实际情况来设置执行频率和执行时点。6、点击确认按钮完成作业计划创建操作。如果想先立即执行一次,可以右键该作业->作业开始步骤。执行时要选择空闲时间,因为优化过程中会导致性能慢,也有可能造成阻塞。执行时间根据数据库大小二、Oracle数据库优化setlines200setheadoffsetlong5000setpagesize50000spoolanalyze.sqlselect'execdbms_stats.gather_table_stats('''||sys_context('USERENV','CURRENT_USER')||''','''||table_name||''','||'method_opt=>''forcolumns'||column_name||'size254'');'fromuser_tableswheretable_namenotlike'TM%';spooloff@analyze.sqlOracle主要做表统计信息更新,索引信息更新先在数据库中执行以下语句,查下出更新脚本,然后复制出脚本,再执行脚本优化。SELECT'AnalyzeTable'||table_name||'computestatistics;'FROMuser_tablesWHEREtable_namelike'T_%'andtable_namenotlike'TM%';也可以把上述复制出的脚本创建好存储过程,然后创建job定时执行存储过程,其中RebuildIndex_UpdateSTATISTICS改为创建好的存储过程createorreplaceprocedureproc_auto_exec_jobasbegindeclarejobnumber;BEGINDBMS_JOB.SUBMIT(JOB=>job,/*自动生成JOB_ID*/WHAT=>'RebuildIndex_UpdateSTATISTICS;',/*需要执行的过程或SQL语句*//*NEXT_DATE=>sysdate,*//*初次执行时间,立刻执行*//*INTERVAL=>'sysdate+3/(24*60*60)'*//*执行周期-每3秒钟*/NEXT_DATE=>TRUNC(SYSDATE+1)+(23*60+30)/(24*60),/*初次执行时间,23点30分*/INTERVAL=>'TRUNC(SYSDATE+1)+(23*60+30)/(24*60)'/*每天12点30分*/);COMMIT;/*dbms_job.submit(job,'proc_test_job;',sysdate,'trunc(sysdate,''mi'')+1/(24*60)');/*执行周期-每1分钟*/commit;*/DBMS_JOB.RUN(job);end;endproc_auto_exec_job;beginproc_auto_exec_job;end;