数据库oracle 10.1.2
sga:2G
pga:500M
连接数200
使用自动管理方案
需求,开发一个文档中心,数据量万百以上(不多)
表结构:
文档数据表:table_a(file_id,name,created_date,auth),主键:file_id,索引:created_date
目录表:table_b(catalog_id,name),主键:catalog_id
文档目录对应表:table_c(file_id,catalog_id),外键file_id,catalog_id
查询语句
select * from (
select a.* from table_a a,table_c c
where a.file_id=c.file_id and c.catalog_id='8193605320F91C68E040007F01005CAA' and auth=?
order by created_date desc)
where rownum<=10
说明:
c.catalog_id='8193605320F91C68E040007F01005CAA' 这个目录下有12万数据,现在执行速度还可以,此语句在plsql中为1秒内,但服务器CPU运行非常高,服务器现在4个CPU,要占用一个CPU的80%左右,而且此语句在程序中每个portal页面大约有15个左右这种查询,一个页面运行数据库CPU就会全部变成100%,页面响应5s,在压力测试过程中,20用启并发此页面,按每页15个查询算相当于同时执行15*20次这种SQL,数据库服务器4个CPU都处于满载状态,页面响应时间120s,如果去掉上面SQL中的order by,20用户并发响应时间在5s以内,created_date普通索引,正序索引和倒序索引都试过性能没有变化,由于每个人所访问文档的权限不一样,所以没办法做缓存或临时表
问题:
各人认为此SQL没有可以优化的余地,服务器也不可能在提升性能,所以请问各位大大们以前是否遇到过类似的问题,还有什么解决方案