http://surpass.swpi.edu.cn/_script/show.asp?Board=dba&Id=76&Tabname=oracle

解决方案 »

  1.   

    1、sql语句是否有问题?
    2、需要考虑的问题实在太多了,找本性能调整的书看看。
      

  2.   

    已经对sql语句进行过调整,可以肯定是数据库系统的问题
      

  3.   

    sga没有调整,请问如何调整,成功马上给分啊,谢谢。
      

  4.   

    ORACLE  SGA  的分配  2002-05ORACLE 8.0.X 版本SGA=((db_block_buffers * block size)+(shared_pool_size+large_pool_size+log_buffers)+1MBORACLE 8.1.X 版本SGA=((db_block_buffers * block size)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB理论上SGA可占OS系统物理内存的1/2——1/3,我们可以根据需求调整我推荐SGA=0.45*(OS RAM)假设服务器运行ORACLE 8.1.X 版本, OS系统内存为2G MEM, db_block_size 是8192 bytes, 
    除了运行ORACLE数据库外, 没有其它的应用程序或服务器软件.这样SGA合计约为921M ( 0.45*2048M ), 设shared_pool_size 300M (300*1024*1024 bytes)设database buffer cache 570M (72960*8192 bytes) initorasid.ora文件里具体各参数如下:shared_pool_size = 314572800
    # 300 Mdb_block_buffers = 72960
    # 570 Mlog_buffer = 524288
    # 512k (128K*CPU个数)large_pool_size = 31457280
    # 30 Mjava_pool_size = 20971520
    # 20 Msort_area_size = 524288
    # 512k (65k--2M)sort_area_retained_size = 524288
    # MTS 时 sort_area_retained_size = sort_area_sizeSUN Solaris里/etc/system文件里的几个参数同样跟内存分配有关ORACLE安装时缺省的设置: 建议修改的设置: 
    set shmsys:shminfo_shmmax=4294967295 
    set shmsys:shminfo_shmmin=1 
    set shmsys:shminfo_shmmni=100 
    set shmsys:shminfo_shmseg=15 
    set semsys:seminfo_semmns=200 
    set semsys:seminfo_semmni=70 
    set ulimit=3000000  
    set semsys:seminfo_semmni=315
    set semsys:seminfo_semmsl=300
    set semsys:seminfo_semmns=630
    set semsys:seminfo_semopm=315
    set semsys:seminfo_semvmx=32767
    set shmsys:shminfo_shmmax=4294967295
    set shmsys:shminfo_shmmni=315
    set shmsys:shminfo_shmseg=10
    set shmsys:shminfo_shmmin=1 其中这些参数的含义shmmax - 共享内存段,建议设大点, 达到最大SGA
    shmmin - 最小的共享内存段.
    shmmni - 共享内存标志符的数量.
    shmseg - 一个进程可分配的最大内存段数.
    shmall - 最大可允许的内存数,比SGA还要大.
    semmns - 信号灯,跟ORACLE的PROCESS数有关.
    semmsl - 一个信号灯中最大的信号灯数.
      

  5.   

    请问bzszp(SongZip) ,如何设置SGA的大小啊,在线等待
      

  6.   

    修改init.ora文件中的参数,就是下面公式中的用到的参数
    ORACLE 8.0.X 版本SGA=((db_block_buffers * block size)+(shared_pool_size+large_pool_size+log_buffers)+1MBORACLE 8.1.X 版本SGA=((db_block_buffers * block size)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB
      

  7.   

    谢谢 bzszp(SongZip),如果这些设置没有问题的话,速度慢还可能有其他什么问题?
      

  8.   

    请看(去掉注释)init.ora文件,请问有何不合理
    db_name = "moom"
    instance_name = moom
    service_names = moom
    db_files = 1024  # INITIAL
    control_files = ("L:\oracle\oradata\sup\control01.ctl", "L:\oracle\oradata\sup\control02.ctl", "L:\oracle\oradata\sup\control03.ctl")
    open_cursors = 300
    max_enabled_roles = 30
    db_file_multiblock_read_count = 8  # INITIALdb_block_buffers = 4326  # INITIALshared_pool_size =31457280  # INITIALlarge_pool_size = 614400
    java_pool_size = 5242880  #20971520  modi by weiyp 1/4
    log_checkpoint_interval = 10000
    log_checkpoint_timeout = 1800
    processes = 150  # INITIAL
    parallel_max_servers = 5  # SMALL
    log_buffer = 32768  # INITIAL
    max_dump_file_size = 10240  # limit trace file size to 5M each
    global_names = trueoracle_trace_collection_name = ""
    background_dump_dest = L:\oracle\admin\sup\bdump
    system_plan
    user_dump_dest = L:\oracle\admin\sup\udump
    db_block_size = 8192
    remote_login_passwordfile = exclusive
    os_authent_prefix = ""
    job_queue_processes = 4
    job_queue_interval = 10
    open_links = 4
    distributed_transactions = 500
    compatible = 8.1.0
    sort_area_size = 65536
    sort_area_retained_size = 65536mts_dispatchers = "(protocol=TCP)(tick=15)(pool=true)"
      

  9.   

    分析你的init.ora
    shared pool  31,457,280  #30M
    data buffers 4326*8192= 35,438,592 #35M
    large pool  614,400    #600K
    #多线程
    mts_dispatchers = "(protocol=TCP)(tick=15)(pool=true)"
    ---------------------
    这样,如果你认为你的语句已经优化了,如果你的内存也不是太大的话。
    对于 shared pool和data buffers的大小已经够了。
    但是,你又用了多线程,又只把large pool配置了600k
    你要么先把多线程去掉,要么把large pool加大(30M)试试(多线程用到了large pool)。
    最后,把你的init文件中的一些参数还调整一下
    db_file_multiblock_read_count = 8  #可以加大到16 or 32试试

    oracle_trace_collection_name = ""
    system_plan
    这注释掉