Your SlideShare is downloading. ×
ออราเคิล (Oracle) Statspack (ติดตั้งและใช้งานเบื้องต้น)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

ออราเคิล (Oracle) Statspack (ติดตั้งและใช้งานเบื้องต้น)

821
views

Published on

เอกสารเกี่ยวกับ Oracle Statspack เพื่อให้ผู้อ่านสามารถเติดตั้งและใช้งานเบื้องต้น Oracle Statspack …

เอกสารเกี่ยวกับ Oracle Statspack เพื่อให้ผู้อ่านสามารถเติดตั้งและใช้งานเบื้องต้น Oracle Statspack

Published in: Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
821
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
37
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Page | 1 Oracle (ออราเคิล) Statspack ติดตั้งและใช้งานเบื้องต้น (เอกสารเวอร์ชัน 0.1) นี่เป็นเอกสารที่รวบรวมข ้อมูลเกี่ยวกับ Oracle Statspack เพื่อให ้ผู้อ่านสามารถเข ้าใจการใช ้งาน Oracle Statspack หลังจากอ่านบทความนี้ ผู้อ่านควรสามารถ ติดตั้ง และใช ้งานเบื้องต ้น Oracle Statspack ได ้ Statspack คืออะไร? Statspack คือเซตของ SQL และ PL/SQL สคริปท์ ที่ใช ้ในการเก็บข ้อมูลสถิติที่เกี่ยวกับ ประสิทธิภาพการทางานของฐานข ้อมูลออราเคิล ในการเก็บข ้อมูลแต่ละครั้งเราเรียกว่า snapshot หลังจากนั้นเราสามารถสร ้างรายงานระหว่าง snapshot เพื่อวิเคราะห์การทางานของฐานข ้อมูล และ ตรวจสอบประสิทธิภาพในการทางานในช่วงเวลานั้น รายงานจาก Statspack นั้น เราสามารถ นาไปใช ้เป็นส่วนหนึ่งในการปรับปรุงฐานข ้อมูล เพื่อให ้มีประสิทธิภาพมากขึ้น ทาไมต้องใช้ Statspack? Statspack เป็นเครื่องมือที่ช่วยในการเก็บข ้อมูลเกี่ยวกับประสิทธิภาพการทางานของฐานข ้อมูล ที่ ไม่มีค่าใช ้จ่ายเพิ่มเติม พร ้อมกันนี้หากเราใช ้ฐานข ้อมูลออราเคิลที่เป็น Standard Edition One (SE1) หรือ Standard Edition (SE) เราจะพบว่าเราไม่สามารถจ่ายเงินเพิ่มในการใช ้“Diagnostics pack” และ ”Tuning pack” ดังนั้น Statspack จึงเป็นทางเลือกที่เหมาะสม หมายเหตุ: เราสามารถพบสคริปท์ต่างๆ ได ้ที่ ORACLE_HOME/rdbms/admin - spcreate.sql ใช ้ในการติดตั้ง Statspack - spauto.sql สร ้างออราเคิล job เพื่อใช ้ในการเก็บสถิติ - spreport.sql หรือ sprepsql.sql ใช ้ในการสร ้างรายงาน - sppurge.sql ใช ้ลบข ้อมูลสถิติของ Statspack สามารถลบในแต่ช่วงของ snapshot ได ้ - sptrunc.sql ใช ้ลบข ้อมูลในเทเบิลทั้งหมดของ Statspack - spdrop.sql ใช ้ลบสิ่งที่เก็บและเกี่ยวกับ Statspack จากนั้นจะลบ Schema (PERFSTAT) ที่ ติดตั้ง Statspack - spuexp.par เป็นพารามิเตอร์ที่ใช ้ในการดึงข ้อมูลทั้งหมดใน schema ของ Statspack ด ้วย คาสั่ง exp ติดตั้ง Statspack อย่างไร? ก่อนติดตั้ง Statspack ควรพิจารณาค่าของพารามิเตอร์ STATISTICS_LEVEL (TYPICAL หรือ ALL) และ TIMED_STATISTICS (ควรเป็น TRUE) เมื่อพิจารณาที่จะใช ้งาน Statspack เราควรหยุดการทางานของ AWR
  • 2. Page | 2 การติดตั้ง - จัดหาพารามิเตอร์ที่ต ้องมีการโต ้ตอบ อาทิเช่น default_tablespace, temporary_tablespace, perfstat_password - ติดต่อฐานข ้อมูลด ้วยผู้ใช ้งานที่เป็น sysdba - กาหนดพารามิเตอร์จากข ้างต ้น - ติดตั้ง Statspack ด ้วย spcreate.sql หมายเหตุ: เราไม่ควรติดตั้ง Statspack บน SYSTEM tablespace และควรสร้าง Tablespace แยก สาหรับการใช ้งาน Statspack CREATE TABLESPACE PERFSTAT_TS DATAFILE '/u01/app/oracle/oradata/orcl/perfstat_ts01.dbf' size 50M autoextend on maxsize unlimited; SQL> connect / as sysdba SQL> define default_tablespace='PERFSTAT_TS' SQL> define temporary_tablespace='TEMP' SQL> define perfstat_password='password' SQL> @?/rdbms/admin/spcreate.sql SQL> undefine perfstat_password หลังจากการติดตั้งเราจะพบ schema ที่ชื่อว่า PERFSTAT SQL> select username, default_tablespace, temporary_tablespace from dba_users where username='PERFSTAT'; USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE ------------------------------ ------------------------------ ------------------------------ PERFSTAT PERFSTAT_TS TEMP SQL> connect perfstat/password Connected. ใช้งาน Statspack อย่างไร? เก็บข้อมูลสถิติปัจจุบันที่เกี่ยวกับประสิทธิภาพการทางานของฐานข้อมูล ใช ้statspack.snap SQL> connect perfstat/password SQL> execute statspack.snap หมายเหตุ: statspack.snap นั้น ประกอบไปด ้วย procedure และ function ดังนั้นเราสามารถ เรียกใช ้statspack.snap ที่เป็น function เพื่อเช็ค snapshot number FUNCTION SNAP RETURNS NUMBER(38)
  • 3. Page | 3 SQL> variable snap number; SQL> begin :snap := statspack.snap; end; 2 / PL/SQL procedure successfully completed. SQL> print snap SNAP ---------- 3 การเก็บข้อมูลสถิติที่เกี่ยวกับประสิทธิภาพการทางานของฐานข้อมูลโดยอัตโนมัติ กรณีนี้เราใช ้ spauto.sql เพื่อสร ้างออราเคิล job ให ้มีการเรียกใช ้งาน “statspack.snap” ทุกๆ ชั่วโมง เราสามารถที่จะเปลี่ยนได ้ภายหลัง ด ้วยการใช ้ dbms_job.interval *** หลังจากมีการติดตั้ง Statspack การเก็บข้อมูลสถิติ (snapshot) หรือเรียกใช้งาน “statspack.snap” โดยอัตโนมัติ เป็ นสิ่งจาเป็ นอย่างมากที่ไม่ควรลืม *** SQL> connect perfstat/password SQL> @?/rdbms/admin/spauto.sql หมายเหตุ: การใช ้งานออราเคิล job ค่าของพารามิเตอร์ job_queue_processes ต ้องมากกว่า 0 ตัวอย่าง SQL> connect perfstat/password Connected. SQL> @?/rdbms/admin/spauto.sql PL/SQL procedure successfully completed. Job number for automated statistics collection for this instance ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ Note that this job number is needed when modifying or removing the job: JOBNO ---------- 1 Job queue process ~~~~~~~~~~~~~~~~~ Below is the current setting of the job_queue_processes init.ora
  • 4. Page | 4 parameter - the value for this parameter must be greater than 0 to use automatic statistics gathering: NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ job_queue_processes integer 1000 Next scheduled run ~~~~~~~~~~~~~~~~~~ The next scheduled run for this job is: JOB NEXT_DATE NEXT_SEC ---------- --------- -------------------------------- 1 09-APR-14 04:00:00 SQL> alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS'; Session altered. SQL> select job, schema_user, what, next_date, interval from user_jobs; JOB SCHEMA_USER WHAT NEXT_DATE INTERVAL ---------- --------------- ------------------------------ -------------------- ---------------------------- 1 PERFSTAT statspack.snap; 09-APR-2014 04:00:00 trunc(SYSDATE+1/24,'HH') หมายเหตุ: เราสามารถลบออราเคิล job ได ้ด ้วย dbms_job.remove(<job number>) การกาหนดระดับ(level)สาหรับใช้ในการเก็บข้อมูล เราสามารถควบคุมจานวนข ้อมูลที่เก็บได ้ด ้วยการกาหนดระดับของ snapshot ยิ่งระดับสูงยิ่งเก็บ ข ้อมูลมาก เพราะยิ่งระดับสูง ก็จะมีการเก็บข ้อมูลสถิติหลายๆ ส่วน หลังการติดตั้ง Statspack เสร็จสิ้น ระดับของ snapshot นั้นจะเป็น 5 (เช็คได ้ด ้วย SQL - select SNAP_LEVEL from STATS$STATSPACK_PARAMETER) เราสามารถเปลี่ยนได ้ด ้วยการใช ้ STATSPACK.MODIFY_STATSPACK_PARAMETER ระดับ (Level) Statistics captured 0 General Performance 5 SQL Statements 6 SQL plans and SQL plan usage 7 Segment-level statistics 10 Parent and child latches ตาราง: Statspack Snapshot Levels (เช็คเพิ่มเติมได ้ที่เทเบิล stats$level_description)
  • 5. Page | 5 หมายเหตุ: ระดับ 6 ไม่พบในเวอร์ชัน 8i, ระดับ 7 เริ่มที่เวอร์ชัน 9.2 ตัวอย่าง SQL> select SNAP_LEVEL from STATS$STATSPACK_PARAMETER; SNAP_LEVEL ---------- 5 SQL> execute statspack.modify_statspack_parameter (i_snap_level=>10); PL/SQL procedure successfully completed. SQL> select SNAP_LEVEL from STATS$STATSPACK_PARAMETER; SNAP_LEVEL ---------- 10 เราสามารถกาหนดระดับของการ snapshot เมื่อใช ้statspack.snap SQL> execute statspack.snap(i_snap_level=>6); หรือเปลี่ยนค่าพารามิเตอร์ระดับของการ snapshot (SNAP_LEVEL) ด ้วยเลย SQL> select SNAP_LEVEL from STATS$STATSPACK_PARAMETER; SNAP_LEVEL ---------- 5 SQL> execute statspack.snap(i_snap_level=>10, i_modify_parameter=>'true'); PL/SQL procedure successfully completed. SQL> select SNAP_LEVEL from STATS$STATSPACK_PARAMETER; SNAP_LEVEL ---------- 10 หมายเหตุ: เรายังสามารถใช ้statspack.modify_statspack_parameter ในการเปลี่ยนค่า threshold ต่างๆ ได ้อีกด ้วย
  • 6. Page | 6 Number of executions of the SQL statement (default 100) Number of disk reads performed by the SQL statement (default 1,000) Number of parse calls performed by the SQL statement (default 1,000) Number of buffer gets performed by the SQL statement (default 10,000) Size of sharable memory used by the SQL statement (default 1 MB) Version count for the SQL statement (default 20) *** เราสามารถตรวจสอบค่าต่างๆ ที่เทเบิล STATS$STATSPACK_PARAMETER *** การสร้างรายงาน (spreport.sql หรือ sprepsql.sql) SQL> connect perfstat/password SQL> @?/rdbms/admin/spreport.sql ตัวอย่าง SQL> connect perfstat/password Connected. SQL> @?/rdbms/admin/spreport.sql Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance ----------- ------------ -------- ------------ 1372167019 ORCL 1 orcl Instances in this Statspack schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ----------- -------- ------------ ------------ ------------ 1372167019 1 ORCL orcl test12c Using 1372167019 for database Id Using 1 for instance number Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed. Pressing <return> without specifying a number lists all completed snapshots.
  • 7. Page | 7 Listing all Completed Snapshots Snap Instance DB Name Snap Id Snap Started Level Comment ------------ ------------ --------- ----------------- ----- -------------------- orcl ORCL 1 09 Apr 2014 02:50 5 3 09 Apr 2014 02:59 5 4 09 Apr 2014 03:05 5 5 09 Apr 2014 03:48 6 6 09 Apr 2014 03:53 6 7 09 Apr 2014 03:54 10 8 09 Apr 2014 03:54 10 9 09 Apr 2014 04:00 10 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 7 Begin Snapshot Id specified: 7 Enter value for end_snap: 9 End Snapshot Id specified: 9 Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is sp_7_9. To use this name, press <return> to continue, otherwise enter an alternative. Enter value for report_name: report-sp_7_9.txt . . . End of Report ( report-sp_7_9.txt ) SQL> !ls -l report-sp_7_9.txt -rw-r--r--. 1 oracle oinstall 135082 Apr 9 04:04 report-sp_7_9.txt หรือใช ้การกาหนดพารามิเตอร์ที่มีการโต ้ตอบ SQL> connect perfstat/password SQL> define begin_snap=9 SQL> define end_snap=10 SQL> define report_name=report_name.txt SQL> @?/rdbms/admin/spreport.sql
  • 8. Page | 8 หากต ้องการสร ้างรายงานสาหรับ SQL เราสามารถใช ้sprepsql.sql แต่เราต ้องทราบ hash_value เสียก่อน SQL> connect perfstat/password SQL> define begin_snap=1 SQL> define end_snap=14 SQL> define hash_value=1616409590 SQL> define report_name=report_sql_name.txt SQL> @?/rdbms/admin/sprepsql.sql การสร้าง baselines เมื่อเราติดตั้ง Statspack และสร ้างรายงานในช่วงเวลาที่เราสนใจ เราอาจจะสงสัยว่าประสิทธิภาพ ของฐานข ้อมูลนั้นเปลี่ยนแปลงไปทางใด ดีหรือไม่ดี ดังนั้นเราควรที่จะเก็บข ้อมูลของ Statspack ในช่วงเวลาที่ฐานข ้อมูลมีประสิทธิภาพในการทางานที่ดี(สร ้าง baselines) เพื่อนามาใช ้ในการ เปรียบเทียบต่อไป เราใช ้statspack.make_baseline FUNCTION MAKE_BASELINE RETURNS NUMBER(38) Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- I_BEGIN_SNAP NUMBER IN I_END_SNAP NUMBER IN I_SNAP_RANGE BOOLEAN IN DEFAULT I_DBID NUMBER IN DEFAULT I_INSTANCE_NUMBER NUMBER IN DEFAULT PROCEDURE MAKE_BASELINE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- I_BEGIN_SNAP NUMBER IN I_END_SNAP NUMBER IN I_SNAP_RANGE BOOLEAN IN DEFAULT I_DBID NUMBER IN DEFAULT I_INSTANCE_NUMBER NUMBER IN DEFAULT FUNCTION MAKE_BASELINE RETURNS NUMBER(38) Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- I_BEGIN_DATE DATE IN I_END_DATE DATE IN I_DBID NUMBER IN DEFAULT I_INSTANCE_NUMBER NUMBER IN DEFAULT PROCEDURE MAKE_BASELINE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- I_BEGIN_DATE DATE IN I_END_DATE DATE IN
  • 9. Page | 9 I_DBID NUMBER IN DEFAULT I_INSTANCE_NUMBER NUMBER IN DEFAULT SQL> execute statspack.make_baseline(i_begin_snap => 5, i_end_snap => 10); และเราสามารถลบ baselines ได ้ด ้วย statspack.clear_baseline FUNCTION CLEAR_BASELINE RETURNS NUMBER(38) Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- I_BEGIN_SNAP NUMBER IN I_END_SNAP NUMBER IN I_SNAP_RANGE BOOLEAN IN DEFAULT I_DBID NUMBER IN DEFAULT I_INSTANCE_NUMBER NUMBER IN DEFAULT PROCEDURE CLEAR_BASELINE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- I_BEGIN_SNAP NUMBER IN I_END_SNAP NUMBER IN I_SNAP_RANGE BOOLEAN IN DEFAULT I_DBID NUMBER IN DEFAULT I_INSTANCE_NUMBER NUMBER IN DEFAULT FUNCTION CLEAR_BASELINE RETURNS NUMBER(38) Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- I_BEGIN_DATE DATE IN I_END_DATE DATE IN I_DBID NUMBER IN DEFAULT I_INSTANCE_NUMBER NUMBER IN DEFAULT PROCEDURE CLEAR_BASELINE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- I_BEGIN_DATE DATE IN I_END_DATE DATE IN I_DBID NUMBER IN DEFAULT I_INSTANCE_NUMBER NUMBER IN DEFAULT หากต ้องการลบข ้อมูลจากการ snapshot เราสามารถใช ้statspack.purge
  • 10. Page | 10 ตัวอย่าง รายงาน Statspack STATSPACK report for Database DB Id Instance Inst Num Startup Time Release RAC ~~~~~~~~ ----------- ------------ -------- --------------- ----------- --- 1372167019 orcl 1 09-Apr-14 00:05 12.1.0.1.0 NO Host Name Platform CPUs Cores Sockets Memory (G) ~~~~ ---------------- ---------------------- ----- ----- ------- ------------ test12c Linux x86 64-bit 1 0 0 3.9 Snapshot Snap Id Snap Time Sessions Curs/Sess Comment ~~~~~~~~ ---------- ------------------ -------- --------- ------------------ Begin Snap: 7 09-Apr-14 03:54:24 38 2.1 End Snap: 9 09-Apr-14 04:00:01 41 2.0 Elapsed: 5.62 (mins) Av Act Sess: 0.0 DB time: 0.06 (mins) DB CPU: 0.04 (mins) Cache Sizes Begin End ~~~~~~~~~~~ ---------- ---------- Buffer Cache: 512M Std Block Size: 8K Shared Pool: 272M Log Buffer: 6,656K Load Profile Per Second Per Transaction Per Exec Per Call ~~~~~~~~~~~~ ------------------ ----------------- ----------- ----------- DB time(s): 0.0 0.2 0.00 0.05 DB CPU(s): 0.0 0.1 0.00 0.03 Redo size: 28,302.7 476,900.0 Logical reads: 2,526.7 42,574.8 Block changes: 35.2 592.8 Physical reads: 0.2 3.2 Physical writes: 3.9 65.1 User calls: 0.2 3.3 Parses: 2.6 43.2 Hard parses: 0.3 4.7 W/A MB processed: 0.5 7.8 Logons: 0.1 1.3 Executes: 3.3 55.9 Rollbacks: 0.0 0.0 Transactions: 0.1 Instance Efficiency Indicators ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • 11. Page | 11 Buffer Nowait %: 100.00 Redo NoWait %: 100.00 Buffer Hit %: 99.99 Optimal W/A Exec %: 100.00 Library Hit %: 94.88 Soft Parse %: 89.12 Execute to Parse %: 22.72 Latch Hit %: 100.00 Parse CPU to Parse Elapsd %: 76.32 % Non-Parse CPU: 93.83 Shared Pool Statistics Begin End ------ ------ Memory Usage %: 89.49 91.52 % SQL with executions>1: 69.92 76.85 % Memory for SQL w/exec>1: 65.98 83.78 Top 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ----------------------------------------- ------------ ----------- ------ ------ lreg timer 112 336 3001 33.1 heartbeat redo informer 336 336 1000 33.1 AQPC idle 11 330 30010 32.5 control file parallel write 182 6 32 .6 CPU time 5 .5 ------------------------------------------------------------- ^LHost CPU (CPUs: 1 Cores: 0 Sockets: 0) ~~~~~~~~ Load Average Begin End User System Idle WIO WCPU ------- ------- ------- ------- ------- ------- -------- 0.64 0.55 7.06 4.55 88.34 0.80 . . . สรุป การใช ้งาน Statspack ถือว่ามีประโยชน์ อย่างมากในการตรวจสอบ วิเคราะห์ประสิทธิภาพการ ทางานของฐานข ้อมูลออราเคิล และยังสามารถช่วยในการวิเคราะห์ปัญหาได ้อีกด ้วย ผู้ทางานดูแลระบบฐานข ้อมูลออราเคิลควรมีความรู้ในการใช ้งาน Statspack และควรสามารถ วิเคราะห์รายงานจาก Statspack
  • 12. Page | 12 อ้างอิง FAQ- Statspack Complete Reference (Doc ID 94224.1) Oracle Performance Tuning 11g – Oracle University Oracle Documents เรียบเรียงโดย Surachart Opun Oracle ACE และ Oracle Expert Blogs: http://surachartopun.com, http://oraclethai.blogspot.com