遠(yuǎn)東侯

          吃不下,硬撐下去!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            1 隨筆 :: 0 文章 :: 0 評論 :: 0 Trackbacks

          2009年10月10日 #

          一、FastUnit平臺的分頁機(jī)制
          使用2次查詢來實現(xiàn)分頁:
          1. 獲取總記錄數(shù)

          select   count ( * from  T  where  

          2. 利用Oracle的rownum獲取指定頁的數(shù)據(jù)

          select   *   from  (  select  row_. * , rownum rownum_  from  (  SELECT   *   FROM  T  where  ) row_  where  rownum  <= ?)  where  rownum_  >  ?

          (根據(jù)上一步得到的總記錄數(shù)以及每頁行數(shù)、當(dāng)前頁碼計算出起始行號和結(jié)束行號,設(shè)置在上述SQL語句的“?”處)

          二、測試環(huán)境
          操作系統(tǒng):Windows XP Professional SP1
          CPU:迅馳1.6G
          物理內(nèi)存:1G
          應(yīng)用服務(wù)器:Tomcat 5.5.23
          數(shù)據(jù)庫:Oracle92(默認(rèn)設(shè)置)

          三、測試對象
          FastUnit平臺的日志表,腳本如下:

          CREATE   TABLE  ACCESSLOG(
              id                       
          NUMBER ( 10 , 0 NOT   NULL ,
              type                  
          NUMBER ( 1 , 0 ),
              userid              
          VARCHAR2 ( 50 ),
              username        
          VARCHAR2 ( 50 ),
              org                    
          VARCHAR2 ( 50 ),
              domain            
          VARCHAR2 ( 50 ),
              groupid           
          VARCHAR2 ( 50 ),
              groupname      
          VARCHAR2 ( 50 ),
              unitid              
          VARCHAR2 ( 50 ),
              unitname         
          VARCHAR2 ( 50 ),
              elementid        
          VARCHAR2 ( 50 ),
              elementname   
          VARCHAR2 ( 50 ),
              cost                  
          NUMBER ( 5 , 0 ),
              ok                    
          NUMBER ( 1 , 0 ),
              curtime           DATE,
              
          PRIMARY   KEY  (id)
          );
          CREATE   INDEX  AL_ct_idx  on  ACCESSLOG (curtime);


          四、測試結(jié)果
          本案例中,數(shù)據(jù)庫除了索引未使用其他優(yōu)化措施。
          僅設(shè)置curtime條件時(使用索引),平均響應(yīng)時間為620毫秒(如下圖所示);
          對比:
          不設(shè)置任何條件時,平均響應(yīng)時間為2300毫秒;
          僅設(shè)置userid條件時(未使用索引),平均響應(yīng)時間為5100毫秒。
          page.png
          (圖中的測試數(shù)據(jù)由FastUnit的跟蹤器統(tǒng)計的,用來跟蹤進(jìn)程內(nèi)各斷點之間時間消耗、數(shù)據(jù)庫連接數(shù)、查詢次數(shù)、增刪改次數(shù)、內(nèi)存消耗等,可以直觀的判斷出系統(tǒng)瓶頸的位置,為系統(tǒng)優(yōu)化提供支持。)

          五、對于大表的一般性優(yōu)化措施
          1. 表結(jié)構(gòu)設(shè)計原則:數(shù)據(jù)類型盡量小(占用空間少,磁盤讀入較快)、單獨設(shè)置表空間
          2. 應(yīng)用程序:合理設(shè)計業(yè)務(wù)、SQL語句優(yōu)化
          3. 合理使用索引:只創(chuàng)建需要的索引,根據(jù)需要使用多列索引,存放于單獨的表空間
          4. 數(shù)據(jù)庫設(shè)置:內(nèi)存分配、查詢優(yōu)化器、分區(qū)、分表等
          5. 硬件環(huán)境:硬盤、CPU、內(nèi)存、網(wǎng)絡(luò)帶寬

          posted @ 2009-10-10 09:07 遠(yuǎn)東侯 閱讀(367) | 評論 (0)編輯 收藏

          僅列出標(biāo)題  
          主站蜘蛛池模板: 慈利县| 上杭县| 镇江市| 黎平县| 桂林市| 泊头市| 桃源县| 大关县| 车致| 陈巴尔虎旗| 织金县| 怀来县| 利辛县| 临海市| 东明县| 鹤壁市| 肥西县| 定州市| 河北区| 渭南市| 措美县| 刚察县| 麦盖提县| 黔西县| 广元市| 灌云县| 五家渠市| 安顺市| 岑溪市| 巴林右旗| 冷水江市| 通榆县| 合山市| 德令哈市| 石渠县| 崇礼县| 连城县| 资兴市| 阿坝县| 勐海县| 新兴县|