国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

ORACLE學習筆記--性能優化二

2024-08-29 13:39:27
字體:
來源:轉載
供稿:網友
10.Oracle什么時候會使用跳躍式索引掃描 這是9i的一個新特性跳躍式索引掃描(Index  Skip  Scan).例如表有索引index(a,b,c),當查詢條件為where  b=?的時候,可能會使用到索引index(a,b,c),如,執行計劃中出現如下計劃:INDEX  (SKIP  SCAN)  OF  “TEST_IDX“  (NON-UNIQUE) Oracle的優化器(這里指的是CBO)能對查詢應用Index  Skip  Scans至少要有幾個條件: <1>  優化器認為是合適的。 <2>  索引中的前導列的唯一值的數量能滿足一定的條件(如重復值很多)。 <3>  優化器要知道前導列的值分布(通過分析/統計表得到)。
 <4>  合適的SQL語句等。 11.怎么樣創建使用虛擬索引 可以使用nosegment選項,如create  index  virtual_index_name  on  table_name(col_name)  nosegment; 假如在哪個session需要測試虛擬索引,可以利用隱含參數來處理alter  session  set  "_use_nosegment_indexes"  =  true; 就可以利用eXPlain  plan  for  select  ……來看虛擬索引的效果,利用@$ORACLE_HOME/rdbms/admin/utlxpls查看執行計劃,最后,根據需要,我們可以刪除虛擬索引,如普通索引一樣drop  index  virtual_index_name; 
注重:虛擬索引并不是物理存在的,所以虛擬索引并不等同于物理索引,不要用自動跟蹤去測試虛擬索引,因為那是實際執行的效果,是用不到虛擬索引的。 12.怎樣監控無用的索引 Oracle  9i以上,可以監控索引的使用情況,假如一段時間內沒有使用的索引,一般就是無用的索引語法為:開始監控:alter  index  index_name  monitoring  usage;檢查使用狀態:select  *  from  v$object_usage;停止監控:alter  index  index_name  nomonitoring  usage; 當然,假如想監控整個用戶下的索引,可以采用如下的腳本:set  heading  offset  echo  offset  feedback  offset  pages  10000
spool  start_index_monitor.sqlSELECT  “alter  index  “owner“.“index_name“  monitoring  usage;“FROM  dba_indexesWHERE  owner  =  USER;spool  offset  heading  onset  echo  onset  feedback  on------------------------------------------------set  heading  offset  echo  offset  feedback  offset  pages  10000spool  stop_index_monitor.sqlSELECT  “alter  index  “owner“.“index_name“  nomonitoring  usage;“
FROM  dba_indexesWHERE  owner  =  USER;spool  offset  heading  onset  echo  onset  feedback  on 13.怎么樣能固定我的執行計劃 可以使用OUTLINE來固定SQL語句的執行計劃,用如下語句可以創建一個OUTLINECreate  oe  replace  outline  OutLn_Name  onSelect  Col1,Col2  from  Tablewhere  ....... 假如要刪除Outline,可以采用Drop  Outline  OutLn_Name;
 對于已經創建了的OutLine,存放在OUTLN用戶的OL$HINTS表下面,對于有些語句,你可以使用update  outln.ol$hints來更新outline,如 update  outln.ol$hints(ol_name,“TEST1“,“TEST2“,“TEST2“,“TEST1)where  ol_name  in  (“TEST1“,“TEST2“); 這樣,你就把Test1  OUTLINE與Test2  OUTLINE互換了,假如想利用已經存在的OUTLINE,需要設置以下參數Alter  system/session  set  Query_rewrite_enabled  =  trueAlter  system/session  set  use_stored_outlines  =  true 14.v$sysstat中的class分別代表什么 統計類別1  代表事例活動2  代表Redo  buffer活動
4  代表鎖8  代表數據緩沖活動16  代表OS活動32  代表并行活動64  代表表訪問128  代表調試信息 15.怎么殺掉特定的數據庫會話 Alter  system  kill  session  “sid,serial#“;或者alter  system  disconnect  session  “sid,serial#“  immediate; 在win上,還可以采用oracle提供的orakill殺掉一個線程(其實就是一個Oracle進程)在linux/Unix上,可以直接利用kill殺掉數據庫進程對應的OS進程
 16.怎么快速查找鎖與鎖等待 數據庫的鎖是比較耗費資源的,非凡是發生鎖等待的時候,我們必須找到發生等待的鎖,有可能的話,殺掉該進程。這個語句將查找到數據庫中所有的DML語句產生的鎖,還可以發現,任何DML語句其實產生了兩個鎖,一個是表鎖,一個是行鎖。可以通過alter  system  kill  session  ‘sid,serial#’來殺掉會話 SELECT  /*+  rule  */  s.username,decode(l.type,“TM“,“TABLE  LOCK“,“TX“,“ROW  LOCK“,NULL)  LOCK_LEVEL,o.owner,o.object_name,o.object_type,s.sid,s.serial#,s.terminal,s.machine,s.PRogram,s.osuserFROM  v$session  s,v$lock  l,dba_objects  oWHERE  l.sid  =  s.sidAND  l.id1  =  o.object_id(+)AND  s.username  is  NOT  NULL
 假如發生了鎖等待,我們可能更想知道是誰鎖了表而引起誰的等待,以下的語句可以查詢到誰鎖了表,而誰在等待。SELECT  /*+  rule  */  lpad(“  “,decode(l.xidusn  ,0,3,0))l.oracle_username  User_name,o.owner,o.object_name,o.object_type,s.sid,s.serial#FROM  v$locked_object  l,dba_objects  o,v$session  sWHERE  l.object_id=o.object_idAND  l.session_id=s.sidORDER  BY  o.object_id,xidusn  DESC 以上查詢結果是一個樹狀結構,假如有子節點,則表示有等待發生。假如想知道鎖用了哪個回滾段,還可以關聯到V$rollname,其中xidusn就是回滾段的USN [Q]  如何有效的刪除一個大表(extent數很多的表)[A]  一個有很多(100k)extent的表,假如只是簡單地用drop  table的話,會很大量消耗CPU(Oracle要對fet$、uet$數據字典進行操作),可能會用上幾天的時間,較好的方法是分多次刪除extent,以減輕這種消耗:1.  truncate  table  big-table  reuse  storage;
2.  alter  table  big-table  deallocate  unused  keep  2000m  (  原來大小的n-1/n);3.  alter  table  big-table  deallocate  unused  keep  1500m  ;....4.  drop  table  big-table; 17.如何收縮臨時數據文件的大小 9i以下版本采用ALTER  DATABASE  DATAFILE  “file  name“  RESIZE  100M類似的語句9i以上版本采用ALTER  DATABASE  TEMPFILE  “file  name“  RESIZE  100M注重,臨時數據文件在使用時,一般不能收縮,除非關閉數據庫或斷開所有會話,停止對臨時數據文件的使用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘泉县| 丰台区| 灵石县| 舟曲县| 镇远县| 抚顺市| 小金县| 瑞金市| 洪洞县| 安西县| 黎平县| 邢台市| 夹江县| 桂林市| 阿拉尔市| 泉州市| 加查县| 徐州市| 静安区| 攀枝花市| 合水县| 通道| 惠州市| 鸡西市| 张家港市| 盈江县| 屏南县| 平阴县| 昌吉市| 宜昌市| 青海省| 合作市| 平顶山市| 城口县| 海淀区| 承德市| 西华县| 信宜市| 乌什县| 武鸣县| 静海县|