เหตุใดจึงต้องเริ่มต้นใหม่เป็นระยะ ๆ เพื่อให้อินสแตนซ์ของฉันทำงานได้ดี


22

เรามีเซิร์ฟเวอร์ฐานข้อมูลการผลิตใน SQL 2005 ทุกอย่างทำงานได้ตามปกติ แต่หลังจากผ่านไปสองสัปดาห์เราจะเห็นว่าประสิทธิภาพการทำงานลดลง การรีสตาร์ท SQL Server จะทำให้ประสิทธิภาพกลับสู่ปกติ

พื้นหลังบางส่วน:

  • ใช้งานฐานข้อมูลมากกว่า 1,200 ฐานข้อมูล (ส่วนใหญ่เป็นผู้เช่ารายเดียวและมีหลายผู้เช่า) ก่อนที่ใครจะบรรยายเกี่ยวกับการย้ายไปยังผู้เช่าหลายคนเท่านั้นมีเหตุผลที่ถูกต้องในการรักษาโครงสร้างนี้ ......
  • RAM คือ 16 GB หลังจากรีสตาร์ทจะใช้เวลาไม่นานสำหรับ SQL Server ที่จะกลับไปใช้งานขนาด 15 GB
  • การเชื่อมต่อฐานข้อมูล Active มีประมาณ 80 การเชื่อมต่อซึ่งเรารู้สึกว่าค่อนข้างดีเนื่องจากมีพูลการเชื่อมต่อหนึ่งต่อเว็บเซิร์ฟเวอร์ต่อกระบวนการดังนั้นเราจึงไม่มีปัญหาการรั่วไหลของการเชื่อมต่อ

เราได้ลองหลายสิ่งหลายอย่างในเวลาที่ไม่มาก: - รัน DBCC DROPCLEANBUFFERS (พร้อม CHECKPOINT) เพื่อล้างแคชข้อมูล มันไม่มีผลกระทบหรือไม่ล้างการใช้ RAM ใด ๆ ) - รัน FREEPROCCACHE และ FREESYSTEMCACHE เพื่อล้างแผนคิวรีและเก็บแคช proc ไม่มีผลกระทบ.

การรีสตาร์ท SQL Server อย่างชัดเจนนั้นไม่เหมาะในสภาพแวดล้อมการใช้งานจริง เรากำลังพลาดอะไรบางอย่าง ใครบ้างที่ผ่านสิ่งนี้?

อัปเดต: เมษายน 28-2012 ยังคงต่อสู้กับปัญหานี้ ฉันลดหน่วยความจำสำหรับ SQL Server เหลือ 10 GB เพื่อตัดทอนการโต้แย้งใด ๆ กับระบบปฏิบัติการ ฉันเข้าใกล้เพื่อ จำกัด ให้แคบลง แต่ต้องการความช่วยเหลือจากขั้นตอนต่อไปของฉัน

นี่คือสิ่งที่ฉันพบหลังจากรีสตาร์ท SQL Server ไฟล์เพจจะอยู่ระหว่าง 12.3 GB และ 12.5 GB มันจะเป็นแบบนั้นต่อไปอีกหลายวัน เธรดเซิร์ฟเวอร์ทั้งหมดจะอยู่ระหว่าง 850 ถึง 930 และมีความเสถียรและสอดคล้องกันสำหรับวันที่สิ้นสุด (sqlserver อยู่ระหว่าง 55 ถึง 85 ต่อเนื่องขึ้นอยู่กับปริมาณการใช้งาน)

จากนั้นก็มี "เหตุการณ์" ฉันไม่รู้ว่าเหตุการณ์คืออะไรฉันไม่สามารถดูได้ในบันทึกและฉันไม่สามารถเห็นสิ่งใดที่สอดคล้องกันในวันของสัปดาห์หรือเวลาที่เกิดขึ้น แต่สิ่งที่น่าสนใจที่เขาทำคือ pagefile ข้ามไปเป็น 14.1 หรือ 14.2 GB และเธรดข้ามไประหว่าง 1750 และ 1785

การตรวจสอบ perfom เมื่อสิ่งนี้เกิดขึ้นกว่า 900 กระทู้เหล่านั้นคือ sqlserver ดังนั้นฉันไปที่ sp_who2 เพื่อดูว่าเธรดเหล่านี้มาจากไหน ... และมีเพียง 80 หรือมากกว่านั้นการเชื่อมต่อฐานข้อมูล

ดังนั้น .... ไม่มีใครมีความคิดใด ๆ ว่าฉันสามารถค้นหาตำแหน่งที่เหลือของเธรด 900 เหล่านี้บนเซิร์ฟเวอร์ SQL ได้อย่างไรและพวกเขากำลังทำอะไร

ปรับปรุง: มิถุนายน 01-2012 ยังคงต่อสู้กับปัญหา สำหรับทุกคนที่อ่านข้อความนี้ปัญหาของเธรดที่กระโดดขึ้นมาได้รับการแก้ไขแล้ว ปัญหานี้เกิดจากซอฟต์แวร์สำรองข้อมูล ComVault มันกำลังสร้างเธรดที่พยายามสำรองฐานข้อมูลที่ไม่ได้อยู่ที่นั่นอีกต่อไป (มันกำลังดูแลรายการของฐานข้อมูลก่อนหน้านี้) แทนที่จะเพียงแค่สำรองฐานข้อมูลปัจจุบัน

แต่ - ปัญหายังคงอยู่และเราต้องเริ่มใหม่ทุกสัปดาห์ให้หรือใช้เวลาสองสามวัน ทำงานกับทีม Rackspace เพื่อดูว่าพวกมันสามารถส่องแสงได้หรือไม่


1
คะแนนสำหรับคำถามโดยละเอียด แต่คุณได้พิจารณาแล้วว่า RAM 16 GB อาจไม่เพียงพอสำหรับฐานข้อมูล 1200 หรือไม่
Nick Vaccaro

ไม่สามารถช่วยในรูปแบบที่ยิ่งใหญ่ของสิ่งต่าง ๆ แต่ฉันรู้ว่า MSSQL ได้รับการออกแบบมาเพื่อใช้ RAM มากเท่าที่มีอยู่ นี่เหมาะสมจริงๆเพราะมี RAM เสียเปล่า ความจริงที่ว่ามันเพิ่มขึ้นถึง 15GB หลังจากรีสตาร์ทไม่ได้เป็นปัญหาในตัวเองฉันไม่คิด อย่างไรก็ตาม @Norla อาจพูดถูกว่า 16 ไม่เพียงพอสำหรับสิ่งที่คุณต้องการ

มี SPID จำนวนเท่าใดที่ใช้งานในช่วงความช้า? เรียกใช้ sp_who2 และให้นับแถวด้วย
Nick Vaccaro

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

ผลลัพธ์คืออะไร: เลือก SUM (single_pages_kb + multi_pages_kb) /1024.0 จาก sys.dm_os_memory_clerks โดยที่ [name] = 'TokenAndPermUserStore'
Mark Storey-Smith

คำตอบ:


7

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

สมมติฐานของฉันคือแอปพลิเคชันอื่นบนเซิร์ฟเวอร์ของคุณกำลังรั่วหน่วยความจำ ฉันเคยเห็นสิ่งนี้มาพร้อมกับซอฟต์แวร์ไวรัส (วายร้ายซอฟต์แวร์เซิร์ฟเวอร์ทุกตัวที่ DBA ชื่นชอบ) และซอฟต์แวร์ตรวจสอบบุคคลที่สาม ฉันจะตรวจสอบการใช้หน่วยความจำของ SQL Server อีกครั้งและฉันจะใช้หน่วยความจำทั้งหมดของแอปพลิเคชันอื่น ๆ ทั้งหมดในกล่องด้วย หากคุณมีข้อ จำกัด อย่างหนักในการใช้งานหน่วยความจำของ SQL Server และตั้งค่าเป็นไม่อนุญาตให้ใช้การเพจอาจเป็นแอปอื่นที่กำลังทำเพจเอาต์และหมดความจุ I / O

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

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


ฉันเห็นด้วยพฤติกรรมทำให้เสียงเหมือนหน่วยความจำรั่ว
Nick Kavadias

+1 สำหรับหน่วยความจำรั่ว ฉันสงสัยว่าอายุการใช้งานของหน้าเว็บนั้นยาวมากบนเซิร์ฟเวอร์นี้ แต่ไม่ควรทำให้ไฟล์เพจเติบโตอย่างรวดเร็ว FYI, เกือบจะเป็นปัญหาเดียวกันที่นี่ (เป็น AV ที่เป็นปัญหา): social.msdn.microsoft.com/Forums/en/sqlsetupandupgrade/thread/…
brian

5

ฉันขอแสดงความยินดีกับคุณที่สามารถเรียกใช้ 1200 DB บนอินสแตนซ์เดียวของเซิร์ฟเวอร์ SQL ที่มี RAM เพียง 16 GB และมีปัญหาประเภทนี้เพียงสองสามสัปดาห์หลังจากการทำงานที่ราบรื่น เรื่องราวดี ๆ ที่จะบอกเล่าในบท PASS ท้องถิ่น

ตอนนี้การแก้ไขปัญหา: RAM ของคุณคือ 16 GB สำหรับทั้ง SQL และ OS ฉันสมมติว่าการตั้งค่าหน่วยความจำสูงสุดของคุณอยู่ที่ 15 GB หรือสูงสุด นี่อาจเป็นสาเหตุให้บัฟเฟอร์พูลใช้หน่วยความจำทั้งหมดและทำให้ระบบปฏิบัติการสำลัก คุณกำลังบอกว่าการล้างบัฟเฟอร์พูลและแคชไม่ได้แสดงความแตกต่างใด ๆ รวมทั้ง PLE ของคุณจะสูงกว่า 300 ซึ่งเป็นการยืนยันกับคอขวดหน่วยความจำ CPU และ IO บนเซิร์ฟเวอร์เป็นอย่างไร (รายละเอียด / สถิติ)

เรียกใช้select * from sys.dm_exec_request where session_id>50 and session_id<>@@spidและอะไรคือความขัดแย้งของทรัพยากรที่คุณเห็น (wait_type, wait_time, last_wait_type, wait_resource)


1200 ไม่เลวร้ายนัก! อุปสรรคที่ใหญ่ที่สุดคือการเอาชนะปัญหาพูลการเชื่อมต่อซึ่งแก้ไขได้ด้วยการตั้งค่าสตริงการเชื่อมต่อเป็นหลักแล้วใช้ USE [DBName] หลังจากการเชื่อมต่อ ในแง่ของการสืบค้นฉันเลือก * จาก sys.dm_exec_requests โดยที่ session_id> 50 และ session_id <> @@ spid และเป็นรายการสั้น ๆ ของคำขอ 4 ถึง 5 สูงสุดและพวกเขาจะออกจากรายการภายใน 500 ms โดยทั่วไป แต่ฉันจะลองทำเมื่อเราเริ่มช้าลงมันเริ่มใหม่ในวันอาทิตย์ดังนั้นตอนนี้มันก็ฮัมเพลงตามปกติ
PaulJ

@PaulJ ขอบคุณสำหรับเคล็ดลับในการรวมการเชื่อมต่อ ตอนนี้ฉันกำลังอ่านหนังสืออยู่
StanleyJohns

5

ฐานข้อมูล 1200 ระบบปฏิบัติการและสิ่งอื่น ๆ ใช่ฉันคิดว่าเซิร์ฟเวอร์จะต้องใช้ RAM มากกว่า 1 กิกะไบต์ในการทำงานโดยเฉพาะอย่างยิ่งถ้าคุณตั้งค่า 15gb เป็นการตั้งค่าหน่วยความจำสูงสุดของ SQL Server มันยังต้องการหน่วยความจำเพิ่มเติมนอก 15gb สำหรับเธรด

ฉันจะชน SQL Server ลงไปที่ 14gb เพื่อให้เซิร์ฟเวอร์มีห้องหายใจเพิ่มขึ้นเล็กน้อย

นอกจากนี้ตัวอย่างที่ระบุใน "Professional SQL Server 2008 Internals and Troubleshooting" สำหรับค่าเผื่อหน่วยความจำในระบบ SQL Server 2008 x64 พร้อมยูทิลิตี้สำรองข้อมูลส่วนที่สามพร้อม RAM 16GB:

  • 2 GB สำหรับ Windows
  • 1GB สำหรับเธรดผู้ปฏิบัติงาน
  • 1GB สำหรับ MPAs ฯลฯ
  • 1GB สำหรับโปรแกรมสำรองข้อมูล
  • 11GB สำหรับ SQL Server

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

declare @servertype int

set @servertype=1
/*
1: x86 (32-bit)
2: x64 (64-bit)
3: IA64

*/

select max_workers_count *
    (
        case @servertype when 1 then .5
            when 2 then 2
            when 3 then 4
            else .5
        end
    )
from sys.dm_os_sys_info

สิ่งที่ดีขอบคุณ ฉันย้ายมันลงเหลือ 14 GB เรียนรู้สิ่งใหม่ที่นี่เพราะฉันปล่อยให้ SQL Server ทำสิ่งที่มันต้องการเสมอ อีกบทความที่ดีสำหรับการอ้างอิงสนับสนุนสำรองนี้: sqlservercentral.com/blogs/glennberry/2009/10/29/…
PaulJ

4

หากหน่วยความจำฐานข้อมูลมีการกระจายอย่างเท่าเทียมกันในทุกฐานข้อมูลคุณมีเพียง 12.8 Megs สำหรับแต่ละฐานข้อมูล (15 * 1024) /1200=12.8 คุณต้องการหน่วยความจำเพิ่มเติม

คุณต้องพิจารณาว่าเพราะเหตุใดประสิทธิภาพจึงลดลง คุณเห็นการล็อคการบล็อกหรือไม่? สถิติการรอคอยเป็นอย่างไร


3

คำสั่ง DBCC จะทำการล้างบัฟเฟอร์หน่วยความจำเท่านั้นโดยไม่ปล่อยหน่วยความจำกลับสู่ระบบปฏิบัติการ

คุณรู้ไหมว่า SQL Server ใช้หน่วยความจำจริงหรือไม่ ฉันขอแนะนำให้ดูที่การตั้งค่าเซสชัน Perfmon หรือเริ่มรวบรวมข้อมูล DMV หลังจากรีสตาร์ทเพื่อดูว่า SQL Server กำลังทำอะไรและทำงานอยู่ นอกจากนี้โปรดทราบว่าผู้ใช้ทำงานมากกว่าปกติในช่วงเวลาเก็บรวบรวมของคุณ (เช่นการประมวลผลสิ้นเดือนเป็นต้น) คุณใช้ SSRS, SSIS หรือ SSAS บนเซิร์ฟเวอร์เดียวกันหรือไม่

คุณมีฐานข้อมูล 1200 บนระบบฐานข้อมูลขนาดใหญ่สุดที่คุณมีคืออะไร?


db ที่ใหญ่ที่สุดคือ 5GB มีเพียง 25 คนเท่านั้นที่มี 1GB หรือมากกว่า ส่วนใหญ่กว้าง 50 ถึง 200 MB
PaulJ

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