OrientDB - การปรับแต่งประสิทธิภาพ

ในบทนี้คุณจะได้รับคำแนะนำทั่วไปเกี่ยวกับวิธีเพิ่มประสิทธิภาพแอปพลิเคชันของคุณที่ใช้ OrientDB มีสามวิธีในการเพิ่มประสิทธิภาพสำหรับฐานข้อมูลประเภทต่างๆ

  • Document Database Performance Tuning - ใช้เทคนิคที่ช่วยหลีกเลี่ยงการสร้างเอกสารสำหรับเอกสารใหม่ทุกฉบับ

  • Object Database Performance Tuning - ใช้เทคนิคทั่วไปเพื่อปรับปรุงประสิทธิภาพ

  • Distributed Configuration Tuning - ใช้วิธีการต่างๆเพื่อปรับปรุงประสิทธิภาพในการกำหนดค่าแบบกระจาย

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

การตั้งค่าหน่วยความจำ

มีกลยุทธ์ที่แตกต่างกันในการตั้งค่าหน่วยความจำเพื่อปรับปรุงประสิทธิภาพ

การตั้งค่าเซิร์ฟเวอร์และฝังตัว

การตั้งค่าเหล่านี้ใช้ได้กับทั้งคอมโพเนนต์เซิร์ฟเวอร์และ JVM ที่แอ็พพลิเคชัน Java ทำงานโดยใช้ OrientDB ในโหมดฝังตัวโดยใช้โดยตรง plocal.

สิ่งที่สำคัญที่สุดในการปรับแต่งคือการตรวจสอบว่าการตั้งค่าหน่วยความจำถูกต้อง สิ่งที่สามารถสร้างความแตกต่างได้อย่างแท้จริงคือการปรับสมดุลระหว่างฮีปและหน่วยความจำเสมือนที่ใช้โดย Memory Mapping โดยเฉพาะอย่างยิ่งในชุดข้อมูลขนาดใหญ่ (GBs, TBs และอื่น ๆ ) ซึ่งโครงสร้างแคชในหน่วยความจำนับน้อยกว่า IO ดิบ

ตัวอย่างเช่นหากคุณสามารถกำหนด 8GB สูงสุดให้กับกระบวนการ Java ได้โดยปกติแล้วการกำหนดฮีปขนาดเล็กและดิสก์แคชบัฟเฟอร์ขนาดใหญ่ (หน่วยความจำนอกฮีป) จะดีกว่า

ลองใช้คำสั่งต่อไปนี้เพื่อเพิ่มหน่วยความจำฮีป

java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...

storage.diskCache.bufferSize การตั้งค่า (ด้วยพื้นที่เก็บข้อมูล "ในเครื่อง" แบบเก่า file.mmap.maxMemory) เป็น MB และบอกจำนวนหน่วยความจำที่จะใช้สำหรับคอมโพเนนต์ Disk Cache โดยค่าเริ่มต้นคือ 4GB

NOTE - หากผลรวมของฮีปสูงสุดและบัฟเฟอร์แคชดิสก์สูงเกินไปอาจทำให้ระบบปฏิบัติการสลับกับการชะลอตัวครั้งใหญ่

การตั้งค่า JVM

การตั้งค่า JVM ถูกเข้ารหัสในไฟล์แบตช์ server.sh (และ server.bat) คุณสามารถเปลี่ยนเพื่อปรับแต่ง JVM ตามการใช้งานและการตั้งค่า hw / sw ของคุณ เพิ่มบรรทัดต่อไปนี้ในไฟล์ server.bat

-server -XX:+PerfDisableSharedMem

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

การเชื่อมต่อระยะไกล

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

กำลังดึงกลยุทธ์

เมื่อคุณทำงานกับฐานข้อมูลระยะไกลคุณต้องใส่ใจกับกลยุทธ์การดึงข้อมูลที่ใช้ ตามค่าเริ่มต้นไคลเอนต์ OrientDB จะโหลดเฉพาะเรกคอร์ดที่มีอยู่ในชุดผลลัพธ์ ตัวอย่างเช่นหากแบบสอบถามส่งคืนองค์ประกอบ 100 รายการ แต่ถ้าคุณข้ามองค์ประกอบเหล่านี้จากไคลเอนต์ไคลเอนต์ OrientDB จะโหลดองค์ประกอบด้วยการเรียกเครือข่ายอีกครั้งหนึ่งไปยังเซิร์ฟเวอร์สำหรับแต่ละระเบียนที่ไม่ได้รับ

พูลการเชื่อมต่อเครือข่าย

โดยค่าเริ่มต้นไคลเอ็นต์แต่ละตัวจะใช้การเชื่อมต่อเครือข่ายเพียงครั้งเดียวเพื่อพูดคุยกับเซิร์ฟเวอร์ เธรดหลายเธรดบนไคลเอ็นต์เดียวกันแชร์พูลการเชื่อมต่อเครือข่ายเดียวกัน

เมื่อคุณมีเธรดหลายเธรดอาจมีปัญหาคอขวดเนื่องจากต้องใช้เวลาส่วนใหญ่ในการรอการเชื่อมต่อเครือข่ายฟรี นี่คือเหตุผลว่าทำไมการกำหนดค่าพูลการเชื่อมต่อเครือข่ายจึงมีความสำคัญ

การกำหนดค่านั้นง่ายมากเพียงแค่ 2 พารามิเตอร์ -

  • minPool- เป็นขนาดเริ่มต้นของพูลการเชื่อมต่อ ค่าดีฟอลต์ถูกกำหนดค่าเป็นพารามิเตอร์ส่วนกลาง "client.channel.minPool"

  • maxPool- เป็นขนาดสูงสุดที่พูลการเชื่อมต่อสามารถเข้าถึงได้ ค่าดีฟอลต์ถูกกำหนดค่าเป็นพารามิเตอร์ส่วนกลาง "client.channel.maxPool"

หากการเชื่อมต่อพูลทั้งหมดไม่ว่างเธรดไคลเอ็นต์จะรอการเชื่อมต่อฟรีครั้งแรก

ตัวอย่างคำสั่งของการกำหนดค่าโดยใช้คุณสมบัติฐานข้อมูล

database = new ODatabaseDocumentTx("remote:localhost/demo"); 
database.setProperty("minPool", 2); 
database.setProperty("maxPool", 5);  

database.open("admin", "admin");

การปรับแต่งการกำหนดค่าแบบกระจาย

มีหลายวิธีในการปรับปรุงประสิทธิภาพของการกำหนดค่าแบบกระจาย

ใช้ธุรกรรม

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

การจำลองแบบเทียบกับ Sharding

การกำหนดค่าแบบกระจาย OrientDB ถูกตั้งค่าเป็นการจำลองแบบเต็ม การมีหลายโหนดที่มีสำเนาฐานข้อมูลเดียวกันเป็นสิ่งสำคัญสำหรับการอ่านมาตราส่วน ในความเป็นจริงแต่ละเซิร์ฟเวอร์มีความเป็นอิสระในการดำเนินการอ่านและการสืบค้น หากคุณมีโหนดเซิร์ฟเวอร์ 10 โหนดทรูพุตการอ่านคือ 10x

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

ขยายขนาดในการเขียน

หากคุณมีเครือข่ายที่ช้าและคุณมีการจำลองแบบซิงโครนัส (ค่าเริ่มต้น) คุณสามารถจ่ายค่าเวลาแฝงได้ ในความเป็นจริงเมื่อ OrientDB ทำงานพร้อมกันจะรออย่างน้อยสำหรับไฟล์writeQuorum. ซึ่งหมายความว่าถ้า writeQuorum คือ 3 และคุณมี 5 โหนดโหนดเซิร์ฟเวอร์ผู้ประสานงาน (ซึ่งการดำเนินการแบบกระจายจะเริ่มต้นขึ้น) จะต้องรอคำตอบจากอย่างน้อย 3 โหนดเพื่อให้คำตอบกับไคลเอ็นต์

เพื่อรักษาความสอดคล้องควรกำหนด writeQuorum เป็นส่วนใหญ่ หากคุณมี 5 โหนดส่วนใหญ่คือ 3 โดยมี 4 โหนดก็ยังคงเป็น 3 การตั้งค่า writeQuorum เป็น 3 แทนที่จะเป็น 4 หรือ 5 จะช่วยลดต้นทุนแฝงและยังคงรักษาความสม่ำเสมอ

การจำลองแบบอะซิงโครนัส

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

ปรับขนาดการอ่าน

หากคุณตั้งค่า writeQuorum เป็นโหนดส่วนใหญ่แล้วคุณสามารถออกจากไฟล์ readQuorumถึง 1 (ค่าเริ่มต้น) สิ่งนี้จะเร่งความเร็วในการอ่านทั้งหมด