SQL Server - ฐานข้อมูลกำลังในหน่วยความจำ?


14

เรามีเซิร์ฟเวอร์ Windows 2008 x64 ขนาดใหญ่ (4 x 4 คอร์ CPU, 32GB RAM) ที่ใช้ SQL Server 2005 64 บิต เรามีขนาดเล็ก (6GB) แต่มีฐานข้อมูลที่สำคัญมากซึ่งค่อนข้างช้าในการเข้าถึงจนกว่าหน้าเว็บจะถูกเก็บไว้ในหน่วยความจำ (การใช้งานเป็นแบบสุ่มมาก I / O ดังนั้นอัตราต่อรองต่ำมากหน้าหนึ่งอยู่ในหน่วยความจำและผู้ใช้ปลายทาง บ่นเกี่ยวกับความเชื่องช้าเริ่มต้น) ดิสก์นั้นเร็วพอ (Local 15K SAS) แต่ฉันเดาว่าแอพค่อนข้างเขียนอย่างงุ่มง่าม (มันเป็นวิธีแก้ปัญหา COTS) ดังนั้นฉันสงสัยว่ามีวิธี "บังคับ" ฐานข้อมูลในหน่วยความจำใน SQL Server 2005 (2008) ไม่รองรับ โดยผู้ขายดังนั้นเราไม่ควรอัปเกรดเป็น) เพื่อช่วยหลีกเลี่ยงบลูส์การเติมแคชเริ่มต้นหรือไม่

วิธีปัจจุบันของฉันคือฉันเรียกใช้ SELECT * จากแต่ละตารางในสคริปต์เพื่อรับหน้าข้อมูลในหน่วยความจำ แต่วัตถุบางอย่าง (ดัชนีการค้นหาข้อความแบบเต็ม ฯลฯ ) ไม่ได้ถูกแคชด้วยวิธีนี้ (และการปรับเปลี่ยนสคริปต์เพื่อสอบถามดัชนีและ เขียนคำสั่ง WHERE ที่เหมาะสมเพื่อแคชเป็นคอมเพล็กซ์ที่ต้มเดือดในมหาสมุทร)

คำตอบ:


15

ไม่ไม่มีวิธีที่จะบังคับให้ฐานข้อมูลเข้าสู่แคชได้โชคไม่ดี วิธีเดรัจฉานบังคับของคุณน่าจะตรงไปตรงมาที่สุด คุณอาจเข้าใกล้ได้มากขึ้นโดยใช้ดัชนีการดีแฟรกสคริปต์ที่มีการตั้งค่าเกณฑ์ที่ต่ำมากเช่นบอกว่าสร้างดัชนีใหม่หากมีการแยกส่วน 1% ดังนี้:

http://sqlserverpedia.com/wiki/Index_Maintenance

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


9

ตกลง - ฉันไม่สามารถออกความเห็นเกี่ยวกับคำตอบของ Brent (แต่เนื่องจากฉันมีตัวแทนไม่เพียงพอ) - แต่ถ้าคุณกำลังจะไปเส้นทาง defrag ไม่จำเป็นต้องสร้างดัชนีใหม่ - เนื่องจากจะสร้างดัชนีใหม่ อาจเพิ่มฐานข้อมูลหากมีพื้นที่ว่างไม่เพียงพอและรับประกันได้ว่าการสำรองข้อมูลบันทึกครั้งต่อไปของคุณมีขนาดอย่างน้อยขนาดดัชนีของคุณและบันทึกของคุณอาจมีบันทึกการบันทึกจำนวนมากด้วย (ขึ้นอยู่กับรุ่นการกู้คืน) หากคุณกำลังจะทำเส้นทาง defrag ทำ ALTER INDEX ... REORGANIZE ซึ่งไม่ต้องการพื้นที่ว่างใด ๆ (ดีหน้า 8k หนึ่งหน้า) แต่จะอ่านระดับลีฟในหน่วยความจำและทำงานบนแฟรกเมนต์ที่แยกส่วนเท่านั้น หน้า ระดับที่ไม่ใช่ใบไม้ควรเข้ามาอย่างรวดเร็วหลังจากการสืบค้นบางอย่างและ (ขึ้นอยู่กับการ fan-out) ควรมีข้อมูลน้อยกว่าระดับใบไม้มาก


ฉันชอบมัน --extrachars
Matt Rogish

1

เหตุใดวัตถุฐานข้อมูลจึงถูกลบออกจากแคชตั้งแต่แรก คุณเริ่มบริการ SQL ใหม่หรือถอดฐานข้อมูลออก / ออนไลน์หรือไม่? หรือพวกเขาถูกผลักออกโดยแคชจากฐานข้อมูลอื่น ๆ ?

ความนับถือ,

SCM


1
ปัจจุบันระบบกำลังทำการทดสอบและรีบูตบ่อยครั้ง ผู้ใช้บ่นหลังจากนั้น ในการผลิตหวังน้อยมาก
Matt Rogish

ฟังดูเหมือนความล่าช้าจากการเริ่มต้นการเชื่อมต่อ ฉันไม่คาดหวังให้ผู้ใช้เห็นความแตกต่างที่เห็นได้ชัดเจนในการอ่านแคช / ไม่ได้อ่าน นอกเสียจากว่าจะมีปัจจัยอื่น ๆ เช่นการโหลดที่มากเกินไปหรือช้าลง
SqlACID


1

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


0

ทำไมคุณไม่ติดตั้งอินสแตนซ์ที่สองของ SQL Server ด้วยฐานข้อมูลนั้นเท่านั้นและตั้งค่าหน่วยความจำขั้นต่ำสำหรับอินสแตนซ์นั้นเป็น 6GB

สิ่งนี้จะรับประกันได้ว่าฐานข้อมูลอื่น ๆ ของคุณจะไม่ทำลายหน่วยความจำจากฐานข้อมูล "เล็ก แต่สำคัญ" ของคุณ

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


0

ฉันจะใช้ผู้สร้างโปรไฟล์เพื่อตรวจสอบ sql ของคุณ เปรียบเทียบการอ่านแบบ 'ตรรกะ' กับการอ่านแบบ 'ทางกายภาพ' เซิร์ฟเวอร์ SQL นั้นฉลาดและจะใช้ RAM ที่ต้องการเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด

ตรวจสอบด้วยว่า autostats ของคุณเป็นรุ่นล่าสุด

หากไม่มีแนวคิดเพิ่มเติมเกี่ยวกับประเภทของคิวรีและขนาดของตาราง db ฟังดูแปลกไปหน่อย

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