Oracle Instances หลายตัว - นี่เป็นการปฏิบัติที่ดีหรือไม่?


9

หนึ่งในลูกค้าของฉันได้ปรับใช้ฐานข้อมูลผลิตภัณฑ์ของเราลงในเครื่อง Solaris ซึ่งมีอินสแตนซ์ของ Oracle อยู่ 3 อินสแตนซ์ ดังนั้นตอนนี้มี Oracle 4 อินสแตนซ์ที่ทำงานบนเครื่องเดียวกัน และตอนนี้เรากำลังประสบปัญหาประสิทธิภาพ

ฉันไม่สามารถเข้าถึงอินสแตนซ์อื่นหรือเครื่องและเครื่องมือทั้งหมดที่ฉันมีคือ alert.log, AWR และ ADDM ฉันรู้ว่ามีบางอย่างเกี่ยวข้องกับหลายกรณี แต่ฉันไม่สามารถพิสูจน์ได้

ดังนั้นคำถามของฉันคือคุณเคยประสบสถานการณ์คล้ายกันหรือไม่? ฉันจะจัดการกับมันได้อย่างไร ฉันจะระบุสาเหตุของปัญหาด้านประสิทธิภาพที่เกี่ยวข้องกับหลายอินสแตนซ์ได้อย่างไร

คำตอบ:


8

Isaac โดยเฉพาะอย่างยิ่งเราเรียกใช้หนึ่งอินสแตนซ์บนเซิร์ฟเวอร์เดียวและใช้แอปพลิเคชันต่าง ๆ เป็นสกีมาและบริการในดาต้าเบสเดียวนั้น หากเซิร์ฟเวอร์มีหน่วยความจำเพียงพอจะไม่มีปัญหาหากแอปพลิเคชันทั้งหมดทำงานเหมือนพลเมือง Oracle ที่ดี ทันทีที่มีแอปพลิเคชั่นที่ไม่ใช้ตัวแปรผูกจะมีความเจ็บปวดเพิ่มขึ้นในโฮสต์ เหมือนกันสำหรับแอปพลิเคชันที่สร้างการเชื่อมต่อใหม่ ๆ ทุกสองสามวินาทีแทนที่จะใช้การเชื่อมต่อที่มีอยู่อีกครั้ง สิ่งที่ชอบกระทำอัตโนมัติยังไม่ได้ช่วยปรับปรุงสถานการณ์ แอปพลิเคชันของคุณมีพฤติกรรมปกติอย่างไร มันมีการอัพเดตขนาดใหญ่หรือไม่? มันจะกระทำเมื่อไหร่? การสร้างซ้ำ / ชั่วโมงเท่าไหร่ แอปของคุณใช้ตัวแปรผูกหรือไม่ ในหลายกรณีตำแหน่งของไฟล์ redolog ออนไลน์มีความสำคัญ หากแอปพลิเคชันสร้างการทำซ้ำจำนวนมาก (หรือแข่งขันกับแอปอื่นที่ทำสิ่งนี้) ตัวเขียนบันทึกจะทำงานช้าลงและทำให้ประสิทธิภาพลดลงอย่างมากเนื่องจากเซสชันกำลังรอให้การเขียนบันทึกเสร็จสิ้น ให้รูปแบบดิสก์แก่ลูกค้าที่มีการทำซ้ำบนดิสก์ RAID-10 โดยเฉพาะและดูว่ามันช่วยได้มากแค่ไหน ค้นหาสถานการณ์การจัดสรรหน่วยความจำด้วย อาจจำเป็นต้องมีการแจกจ่ายหน่วยความจำที่มีอยู่อย่างพอใช้

ฉันหวังว่านี่จะช่วยได้


คุณถูก. เราตรวจสอบอินสแตนซ์ของเราและดำเนินการปรับให้เหมาะสมที่สุดที่เราสามารถทำได้ แต่การแสดงไม่เสถียรบางครั้งมันก็ไม่มีเหตุผลที่จะอธิบาย (จากด้านข้างของเรา)
Isaac A. Nugroho

Isaac, ฐานข้อมูลรีสตาร์ทบ่อยแค่ไหน, คุณเป็นรุ่นอะไรและคุณมีฮิสโตแกรมในคอลัมน์, สร้างขึ้นโดยกระบวนการสถิติอัตโนมัติ? คุณใช้ตัวแปรผูกและเครื่องมือเพิ่มประสิทธิภาพการแอบดูล่วงหน้าหรือไม่?
ik_zelf

2

การรันหลายอินสแตนซ์บนเซิร์ฟเวอร์เดียวกันเป็นไปได้และในบางกรณีจำเป็น oratab ได้รับการออกแบบมาโดยเฉพาะเพื่อจัดการการจัดการหลายอินสแตนซ์ ในกรณีที่คุณมีแอปพลิเคชั่นอิสระหลายตัวคุณอาจต้องการอินสแตนซ์สำหรับแต่ละแอปพลิเคชัน

การมีหน่วยความจำที่เพียงพอเป็นสิ่งสำคัญ Oracle สร้าง SGA ในหน่วยความจำที่ใช้ร่วมกัน หากคุณมีหน่วยความจำไม่เพียงพอ SGA หรือกระบวนการจะเริ่มทำการสลับเข้าและออก สิ่งนี้เรียกว่าการฟาดฟันและส่งผลให้เกิดการลงโทษอย่างมีนัยสำคัญ

อาจเป็นไปได้ที่จะปรับอินสแตนซ์ให้ทำงานด้วย SGA ที่เล็กลง Oracle จัดเตรียมเครื่องมือเพื่อช่วยปรับขนาด SGA หากอินสแตนซ์ใด ๆ มี SGA ที่ใหญ่เกินไปมันจะลงโทษอินสแตนซ์ทั้งหมด

การใช้งานกับหน่วยความจำซึ่งมีความสำคัญก็คือพื้นที่บัฟเฟอร์ สิ่งนี้ทำหน้าที่เป็นแคชรองและสามารถกำจัด I / O การอ่านที่สำคัญได้

การรันsar(สมมติว่าระบบปฏิบัติการ Unix base O / S) สามารถให้การวินิจฉัยที่ดีแก่คุณเกี่ยวกับปัญหาที่เกิดขึ้น ปัญหาที่น่าจะเกิดจากการสลับเปลี่ยนหรือความอิ่มตัวของดิสก์ I / O การเพิ่มแรมจะแก้ปัญหาเหล่านี้ได้

ความอิ่มตัวของดิสก์ I / O อาจได้รับการจัดการด้วยการย้ายพื้นที่บางตารางไปยังดิสก์อื่น โดยทั่วไปแล้วฉันกำหนดค่า Oracle เพื่อให้ I / O กระจายข้ามดิสก์ให้ได้มากที่สุด

แก้ไข: เหล่านี้เป็นบางกรณีซึ่งอาจต้องใช้อินสแตนซ์แยกต่างหาก

  • จำเป็นเสมอหากคุณใช้ Oracle เวอร์ชันต่าง ๆ บนเซิร์ฟเวอร์เดียวกัน แอปพลิเคชันไม่ได้รับการรับรองหรือมีความสามารถในการทำงานกับเวอร์ชันล่าสุดเสมอไป
  • คุณอาจต้องการอินสแตนซ์ที่สามารถย้อนกลับเป็นเวลาโดยอัตโนมัติ (แม้ว่าฉันจะไม่ย่อท้อ แต่ฉันก็ใช้สิ่งนี้สำหรับสภาพแวดล้อมการทดสอบอัตโนมัติ)
  • หากคุณมีการอ้างอิงสกีมาแบบ hard-coded ในแอปพลิเคชันคุณอาจต้องการอินสแตนซ์ต่าง ๆ เพื่อจัดการกับการชนกันของเนมสเปซ
  • ข้อกำหนดด้านความปลอดภัยอาจง่ายต่อการจัดการโดยใช้อินสแตนซ์แยกต่างหาก อาจเหมาะสมที่จะใช้เซิร์ฟเวอร์ต่าง ๆ ในกรณีนี้
  • การรันเวอร์ชันที่แตกต่างของฐานข้อมูลเดียวกัน (การพัฒนาการทดสอบการยอมรับของผู้ใช้การฝึกอบรมและการผลิต) บนเซิร์ฟเวอร์เดียวกันนั้นปลอดภัยกว่าด้วยอินสแตนซ์แยกต่างหาก ฉันจะไม่เรียกใช้สภาพแวดล้อมเหล่านี้ทั้งหมดบนเซิร์ฟเวอร์เดียวกัน แต่มักจะรันสองหรือมากกว่าบนเซิร์ฟเวอร์เดียวกัน

คุณสามารถให้ตัวอย่างที่จำเป็นในการใช้งานหลายอินสแตนซ์ได้หรือไม่?
ScottCher

1
@ScottCher ฉันได้แก้ไขคำตอบของฉันเพื่อให้บางกรณี
BillThor

1

ทรัพยากรที่สำคัญที่สุดคือ RAM

แต่ละอินสแตนซ์ของ Oracle ที่ทำงานอยู่จะจัดสรร RAM ให้กับตัวเองเมื่อเริ่มต้นและไม่โหลด

เรากำลังรัน 10g ด้วย 10 และ 11g ด้วย 8 อินสแตนซ์ แต่นี่คือเซิร์ฟเวอร์การพัฒนา หลังจากรีสตาร์ทระบบปฏิบัติการบริการ Oracle บางอย่างไม่เริ่มทำงานโดยอัตโนมัติและต้องเริ่มต้นด้วยตนเอง: Oradim -startup -sid xxx

เราเพิ่งเริ่มใช้การจัดการหน่วยความจำอัตโนมัติ แต่สถานการณ์ก็แตกต่างจาก SQL Server ซึ่งคุณสามารถเพิ่มฐานข้อมูลได้มากเท่าที่มีพื้นที่ว่างในดิสก์

ในกรณีของคุณด้วยอินสแตนซ์เพิ่มเติมบนหนึ่งเครื่องSGAสำหรับแต่ละอินสแตนซ์จะเล็กลง sql ที่คอมไพล์แล้วน้อยกว่าสามารถถูกแคชและเครื่องต้องทำการคอมไพล์ sql เพิ่มเติมซึ่งช่วยลดประสิทธิภาพ

การเพิ่ม RAM อาจช่วยคุณได้


2
เหตุผลที่คุณพูดว่าเซิร์ฟเวอร์ SQL นั้นแตกต่างกันมากขึ้น กลุ่มของกระบวนการและหน่วยความจำเฉพาะของมันเป็นตัวอย่าง หากคุณเพิ่มฐานข้อมูล SQL Server และไม่เพิ่มกระบวนการใหม่นั่นไม่ใช่กรณีตัวอย่าง ในกรณีนี้มันใกล้กว่าการเพิ่มสคีมา
สเตฟานีหน้า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.