บางคนอาจพูดว่าสองกระทู้มากเกินไป - ฉันไม่ได้อยู่ในค่ายนั้น :-)
นี่คือคำแนะนำของฉัน: วัดไม่ต้องเดา ข้อเสนอแนะอย่างหนึ่งคือให้กำหนดค่าได้และตั้งค่าเริ่มต้นที่ 100 จากนั้นปล่อยซอฟต์แวร์ของคุณเป็นรุ่นล่าสุดและตรวจสอบสิ่งที่เกิดขึ้น
หากการใช้เธรดของคุณอยู่ที่ 3 หมายถึง 100 จะมากเกินไป หากยังคงอยู่ที่ 100 ตลอดทั้งวันให้ชน 200 และดูว่าเกิดอะไรขึ้น
คุณสามารถมีรหัสของตัวเองตรวจสอบการใช้งานและปรับการตั้งค่าสำหรับครั้งต่อไปที่มันเริ่ม แต่นั่นอาจจะมากเกินไป
สำหรับการชี้แจงและทำอย่างละเอียด:
ฉันไม่สนับสนุนการหมุนระบบย่อยการรวมเธรดของคุณเองโดยทั้งหมดใช้ระบบที่คุณมี แต่เนื่องจากคุณถามเกี่ยวกับจุดตัดที่ดีสำหรับเธรดฉันถือว่าการใช้เธรดพูลของคุณมีความสามารถในการ จำกัด จำนวนเธรดสูงสุดที่สร้างขึ้น (ซึ่งเป็นสิ่งที่ดี)
ฉันได้เขียนรหัสและการเชื่อมต่อฐานข้อมูลร่วมกันและพวกเขามีคุณสมบัติดังต่อไปนี้ (ซึ่งฉันเชื่อว่าเป็นสิ่งจำเป็นสำหรับประสิทธิภาพ):
- จำนวนเธรดที่แอ็คทีฟต่ำสุด
- จำนวนเธรดสูงสุด
- ปิดกระทู้ที่ไม่ได้ใช้ในขณะที่
ชุดแรกจะเป็นพื้นฐานสำหรับประสิทธิภาพขั้นต่ำในแง่ของเธรดพูลไคลเอ็นต์ (จำนวนเธรดนี้พร้อมใช้งานเสมอ) ชุดที่สอง จำกัด การใช้ทรัพยากรโดยใช้เธรดที่ใช้งานอยู่ ครั้งที่สามจะนำคุณกลับสู่พื้นฐานในเวลาที่เงียบสงบเพื่อลดการใช้ทรัพยากรให้น้อยที่สุด
คุณต้องสมดุลการใช้ทรัพยากรของการมีเธรดที่ไม่ได้ใช้ (A) กับการใช้ทรัพยากรที่มีเธรดไม่เพียงพอที่จะทำงาน (B)
(A) เป็นการใช้งานหน่วยความจำ (สแต็กและอื่น ๆ ) เนื่องจากเธรดที่ทำงานไม่ได้จะไม่ใช้ CPU มากนัก (B) โดยทั่วไปจะมีความล่าช้าในการประมวลผลคำขอในขณะที่พวกเขามาถึงในขณะที่คุณต้องรอให้เธรดพร้อมใช้งาน
นั่นเป็นเหตุผลที่คุณวัด เมื่อคุณระบุเธรดส่วนใหญ่ของคุณจะรอการตอบกลับจากฐานข้อมูลเพื่อไม่ให้เธรดทำงาน มีสองปัจจัยที่มีผลต่อจำนวนเธรดที่คุณควรอนุญาต
แรกคือจำนวนการเชื่อมต่อฐานข้อมูลที่มีอยู่ นี่อาจเป็นขีด จำกัด ที่ยากเว้นแต่ว่าคุณสามารถเพิ่มได้ที่ DBMS - ฉันจะถือว่า DBMS ของคุณสามารถใช้การเชื่อมต่อได้ไม่ จำกัด จำนวนในกรณีนี้ (แม้ว่าคุณควรจะวัดด้วยเช่นกัน)
จากนั้นจำนวนเธรดที่คุณควรขึ้นอยู่กับการใช้งานในอดีตของคุณ จำนวนขั้นต่ำที่คุณควรใช้คือจำนวนขั้นต่ำที่คุณเคยเรียกใช้ + A% ด้วยจำนวนต่ำสุดที่แน่นอน (ตัวอย่างเช่นและทำให้สามารถกำหนดค่าได้เช่นเดียวกับ A) 5
จำนวนเธรดสูงสุดควรเป็นประวัติสูงสุดของคุณ + B%
คุณควรตรวจสอบการเปลี่ยนแปลงพฤติกรรม หากด้วยเหตุผลบางอย่างการใช้งานของคุณไปถึง 100% พร้อมใช้งานในช่วงเวลาที่สำคัญ (เพื่อให้มีผลต่อประสิทธิภาพของลูกค้า) คุณควรชนค่าสูงสุดที่อนุญาตจนกว่าจะสูงขึ้นอีก B% อีกครั้ง
ในการตอบสนองต่อ "ฉันควรวัดอะไร?" คำถาม:
สิ่งที่คุณควรวัดโดยเฉพาะคือจำนวนเธรดสูงสุดในการใช้งานพร้อมกัน (เช่นรอการส่งคืนจากการเรียก DB) ภายใต้โหลด แล้วเพิ่มปัจจัยด้านความปลอดภัยของ 10% สำหรับตัวอย่าง (เน้นตั้งแต่โปสเตอร์อื่น ๆ ดูเหมือนจะใช้ตัวอย่างของฉันเป็นคำแนะนำคงที่)
นอกจากนี้ควรทำในสภาพแวดล้อมการผลิตเพื่อการปรับแต่ง มันก็โอเคที่จะได้รับการประเมินล่วงหน้า แต่คุณไม่เคยรู้ว่าสิ่งที่การผลิตจะโยนทางของคุณ (ซึ่งเป็นเหตุผลที่สิ่งเหล่านี้ควรจะกำหนดค่าที่รันไทม์) นี่คือการจับสถานการณ์เช่นสองเท่าที่ไม่คาดคิดของลูกค้าโทรเข้ามา