วันจันทร์ที่ 6 สิงหาคม พ.ศ. 2555

Oracle Shared Server Mode

การกำหนดค่า Shared Server Mode ของ Oracle


1.SHARED_SERVERS:
 ค่าจำนวน Shared Services ขั้นต่ำซึ่งจะเปิดขึ้นเมื่อเริ่ม Start Database Services โดยควรกำหนดค่ามาก 0
 ถ้าเท่ากับ 0 แสดงว่าเป็นการ Disable ใน Mode นี้ อัติโนมัติให้กลับเป็นแบบ Dedicated Mode
 การประมาณการค่า Shared Servers มีหลักการคือ
ตัวอย่าง
1.ระบบมี Client ที่ต้องการเข้าใช้งาน 1000
2.ประมาณการการเข้าใช้พร้อมๆ กัน (Con-Current ) ที่ 10%
3.แสดงว่า Minimun ค่า Shared Servers ควรเท่ากับ 1000*(10/100)  = 100

ตัวอย่าง คำสั่ง
SQL> alter system set shared_servers = 100  scope=both sid='*'

2.MAX_SHARED_SERVERS:
ค่าสูงสุดที่จะสร้าง Shared Services โดยค่านี่จะถูกใช้ในกระบวนการ Process ภายในของ Oracle เอง
ซึ่งหาก Database เกิด Load มากๆ และ Resource ใน Server เริ่มไม่พอ Oracle จะพยายามปรับค่า Shared Server ลง ไม่ให้เกินค่านี้
ซึ่งถ้าไม่ได้กำหนด Oracle เองจะปรับให้เหมาะสมโดยอัติโนมัติซึ่งไม่เกี่ยวกับค่า SHARED_SERVERS
โดยค่า SHARED_SERVERS  เป็นการ กำหนดค่า โดย DBA จงใจให้ Oracle สร้าง Shared ให้รองรับ
ซึ่งอาจมากกว่า ค่า MAX_SHARED_SERVERS ก็ได้

ตัวอย่าง คำสั่ง
SQL> alter system set max_shared_servers = 100  scope=both sid='*'

3.SHARED_SERVER_SESSIONS:
   ค่าจำนวน Shared Services ที่ อนุญาตต่อ 1 session ที่จะ Run ได้สูงสุดซึ่ง
กำหนดค่าไม่เกินค่า SESSION รวมที่กำหนดไว้ใน Service หลัก
ถ้าไม่ระบุ Oracle จะกำหนดให้ตามความค่าที่ Session เหลือ ณ ขณะนั้นๆ .

ตัวอย่าง คำสั่ง
SQL> alter system set shared_servers_sessions = 100  scope=both sid='*'

4.DISPATCHERS:
  กำหนดจะเป็นค่าการกระจาย Service ของ Oracle ใน Shared Servers Mode
มีค่าที่ต้องเกี่ยวข้องเพื่อใช้อ้างอิงอีกคือ
ค่า processes  , sessions    และ transactions โดยสามารถตรวจสอบได้ด้วยคำสั่ง
SQL> show parameter processes ;
SQL> show parameter sessions ;
SQL> show parameter transactions;

โดยค่าที่เกิดจากการคำนวณได้จาก

อ้างอิงค่าจากข้อ 1 ค่า Client connection สูงสุด = 1000 ซึ่ง ได้เท่ากับ X = 1000

1. Processes = X    =1000
2. Sessions   = X*1.1+5    =1150
3. Transactions = sessions *1.1    =1265

 การประมาณการค่า DISPATCHERS:  มีหลักการคือ
ตัวอย่าง
Number of dispatchers = CEIL ( max. concurrent sessions / connections for each dispatcher )

จากข้างต้น
max. concurrent sessions = 1150
connections for each dispatcher = Processes / (Con-Current = 10% )  = 1000 / 100 = 10
ดั้งนั้น ค่า
DISPATCHERS:  = 1150 / 10 = 115

ตัวอย่าง คำสั่ง
SQL> alter system set dispatchers = "(PROTOCOL=TCP) (DISPATCHERS=115) "  scope=both sid='*'  ;


#ตรวจสอบค่า โดย

SQL> select * from  v$shared_server;
SQL> select * from  V$DISPATCHER ;

#สิ่งที่จำเป็นตามมาที่ต้องปรับเพิ่มเติมคือ

1.ต้องปรับค่า Oracle ให้เป็น Mode Auto Memory Management โดยการกำหนดค่าเพิ่มเติมดังนี้

Alter system set memory_target = 3000m scope=both;
Alter system set sga_target = 2000m scope=both;
Alter system set pga_aggregate_target = 1000m scope=both;

Alter system set memory_target = 0 ;จะเป็นการปิด automatic memory management AMM

SGA + PGA  ไม่ควรเกิน  70% ของ total memory


2.ต้องกำหนดให้ Oracle รองรับการ Share Cursor ด้วยการปรับค่าเป็น
ALTER SYSTEM SET CURSOR_SHARING=FORCE SCOPE=BOTH

รายละเอียดอ้างอิง

https://forums.oracle.com/forums/thread.jspa?messageID=2114775
http://docs.oracle.com/cd/B28359_01/server.111/b28310/manproc003.htm#autoId7
http://it.toolbox.com/wiki/index.php/Shared_server
http://www.connectionstrings.com/oracle
http://www.exploreoracle.com/2009/07/22/configuration-of-oracle-shared-server/
http://sapbasis.wordpress.com/2010/06/19/how-to-estimate-the-pga-sga-size-configuration-database-server-memory/
http://psoug.org/reference/cursor_sharing.html

ไม่มีความคิดเห็น:

แสดงความคิดเห็น