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


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.