数据库在使用时间长了之后,往往会随着数据量的增加,出现查询性能下降的情况。这种情况往往可以通过优化表的索引来解决。对于Sybase数据库,可以通过下面的方式定位。
配置Sybase
ASE12.5.0.3开始,供了一整套用于系统监控的proxy table。默认安装下,这些新的监控表数据库中是没有的,需要执行以下步骤安装,这里假设用户的server名为SYBASE:
- 增加loopback服务。使用isql登录服务器,执行以下命令
isql -Usa -P -SSYBASE
1>use master
2>go
1>sp_addserver loopback, null, SYBASE
2>go 在CMD下,执行%SYBASE%/ASE-12.5/script目录下installmontables,安装MDA表。这些表会安装在master数据库中。
isql -Usa -P -SSYBASE -i installmontables
- 给sa授权mon_role(监控用户)权限
isql -Usa -P -SSYBASE1>grant role mon_role to sa
2>go
配置相关参数。使用isql登录服务器,执行以下命令
isql -Usa -P -SSYBASE
1>sp_configure 'max SQL text monitored',2000
2>go
1>sp_configure 'SQL batch capture',1
2>go
1>sp_configure 'sql text pipe max messages',30000
2>go
1>sp_configure 'sql text pipe active',1
2>go
1>sp_configure 'statement statistics active',1
2>go
1>sp_configure 'per object statistics active',1
2>go
1>sp_configure 'statement pipe max messages',30000
2>go
1>sp_configure 'statement pipe active',1
2>go
上述参数中'max SQL text monitored'是静态的,配置完后,需要重新启动后才能生效。
监控sql并优化索引
配置好Sybase之后,可以在发现系统执行缓慢的时候监控Sybase服务器中执行的sql,步骤如下:
- 开始监控
1>sp_configure 'enable monitoring',12>go
- 在前端浏览器中执行操作缓慢的操作
- 在isql窗口中执行
1>select s.SPID, s.CpuTime, t.LineNumber, t.SQLText from master..monProcessStatement s, master..monProcessSQLText t where s.SPID = t.SPID order by s.CpuTime DESC
2>go
查询出来的结果中包含了当前正在执行的sql语句,并按照花费的cpu时间进行排序。 - 找到最费时的sql语句之后,通过执行计划查看其有没有使用索引
1>set showplan on
2>set noexec on
3>go
1>select ......(上一步得到的语句)
2>go
从返回的查询结果中找到没有使用索引,而是执行全表扫描的表,按select语句中的where条件加上索引 - 关闭监控。
1>sp_configure 'enable monitoring',02>go
由于监控会影响Sybase数据库的性能,因此使用完要及时关闭。