พูลการเชื่อมต่อถูกรีเซ็ตด้วยข้อผิดพลาด: 18056, ความรุนแรง: 20, สถานะ: 46. และตัวนับ Perfmon ไม่แสดง


21

เราใช้การรับรองความถูกต้องของ SQL (เพื่อลดจำนวนพูลการเชื่อมต่อ) & สตริงการเชื่อมต่อ. NET 4.0 เพื่อเชื่อมต่อกับ SQL Server Enterprise Edition 2012 SP1 บนเซิร์ฟเวอร์ Windows 2008 R2 Enterprise:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
19 ตุลาคม 2555 13:38:57
ลิขสิทธิ์ (c) Microsoft Corporation
รุ่นองค์กร (64 บิต) บน Windows NT 6.1 (รุ่น 7601: Service Pack 1)

เราใช้เซิร์ฟเวอร์ประมาณ 50 เซิร์ฟเวอร์แบ่งออกเป็น 8 กลุ่มต่าง ๆ ส่วนต่าง ๆ ของเว็บไซต์

เว็บไซต์ของเรากำลังใช้ SQL Server นี้เพื่อบันทึกข้อมูลการติดตามการเยี่ยมชม ในช่วงสองสามวันที่ผ่านมามีข้อความต่อไปนี้เกี่ยวกับการตั้งค่าพูลการเชื่อมต่อใหม่:

ไคลเอ็นต์ไม่สามารถใช้เซสชันซ้ำด้วย SPID 1327 ซึ่งได้รับการรีเซ็ตสำหรับการรวมการเชื่อมต่อ ID ความล้มเหลวคือ 46 ข้อผิดพลาดนี้อาจเกิดจากการดำเนินการก่อนหน้านี้ล้มเหลว ตรวจสอบบันทึกข้อผิดพลาดสำหรับการดำเนินการที่ล้มเหลวทันทีก่อนที่ข้อความแสดงข้อผิดพลาดนี้

อ่านบันทึกข้อผิดพลาด:

ข้อผิดพลาด: 18056, ความรุนแรง: 20, สถานะ: 46
ไคลเอ็นต์ไม่สามารถใช้เซสชันด้วย SPID 959 ซ้ำซึ่งได้รับการรีเซ็ตสำหรับการรวมการเชื่อมต่อ ID ความล้มเหลวคือ 46 ข้อผิดพลาดนี้อาจเกิดจากการดำเนินการก่อนหน้านี้ล้มเหลว ตรวจสอบบันทึกข้อผิดพลาดสำหรับการดำเนินการที่ล้มเหลวทันทีก่อนที่ข้อความแสดงข้อผิดพลาดนี้
การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'xxxx' สาเหตุ: ไม่สามารถเปิดฐานข้อมูล 'xxxxxxxx' ที่กำหนดค่าไว้ในวัตถุเข้าสู่ระบบในขณะที่ตรวจสอบการเข้าสู่ระบบในการเชื่อมต่ออีกครั้ง [ลูกค้า: 10.xx.xx.xxx]

หลังจากการขุดฉันพบเอกสารนี้ในบล็อก CSS: วิธีการทำงาน: ข้อผิดพลาด 18056 - ลูกค้าไม่สามารถใช้เซสชันด้วย SPID ## อีกครั้งซึ่งได้รับการรีเซ็ตสำหรับการรวมการเชื่อมต่อและเอกสารนี้โดย Aaron Bertrand: การแก้ไขปัญหาข้อผิดพลาด 18456 . ฉันรู้ว่าหมายเลขข้อผิดพลาดแตกต่างกัน แต่รหัสความล้มเหลวเหมือนกันกับจำนวนข้อความเหมือนกัน)

ID ความล้มเหลว 46 แสดงว่าการเข้าสู่ระบบไม่ได้รับอนุญาต การเข้าสู่ระบบของเราเริ่มต้นไปที่ฐานข้อมูลหลักและชื่อ db เป็นข้อมูลเฉพาะในสตริงการเชื่อมต่อ

ฉันต้องการที่จะตรวจสอบจำนวนสระสตริงการเชื่อมต่ออื่น ๆ ของการตรวจสอบและเคาน์เตอร์ทั้งหมดใน Perfmon .Net Data Provider for SqlServerสำหรับ มันให้ตัวเลือกdefaultdomain9675สำหรับอินสแตนซ์เท่านั้นดังนั้นฉันเลือกว่าสมมติว่าเป็นระบบที่สร้างชื่อ ID สำหรับเครือข่าย Datacentre ของเรา น่าเสียดายที่ตัวนับทั้งหมดกำลังอ่านค่าศูนย์ ในหนึ่งในเซิร์ฟเวอร์หลักอื่น ๆ ของเรากลุ่มการเชื่อมต่อกำลังบินวนอยู่รอบ ๆ 10 ซึ่งเป็นสิ่งที่ฉันคาดว่าจะเห็นบนเซิร์ฟเวอร์ที่สมบูรณ์ด้วยโหลดประเภทนั้น

คำถามของฉันคือ 3 เท่า

  1. มีใครแนะนำได้.Net Data Provider for SqlServerไหมว่าเพราะเหตุใด Windows 2008 R2 Server จึงไม่แสดง

  2. มีใครประสบกับสิ่งนี้ตามที่เห็นได้ชัดว่าฉันเชื่อว่าการเข้าสู่ระบบไม่ได้รับอนุญาตเป็นปลาเฮอริ่งแดง?

  3. หากกลุ่มเว็บเซิร์ฟเวอร์ต่าง ๆ มีไวยากรณ์สตริงการเชื่อมต่อเหมือนกัน แต่มีช่องว่างต่างกันเล็กน้อยนี่จะทำให้เซิร์ฟเวอร์ใช้กลุ่มการเชื่อมต่ออื่นหรือไม่

การตั้งค่าหน่วยความจำขั้นต่ำ & สูงสุดคือ 20GB และ 58GB ตามลำดับ เซิร์ฟเวอร์เป็นเซิร์ฟเวอร์ฐานข้อมูลเฉพาะที่มี RAM 64GB ฉันไม่คิดว่าหน่วยความจำเป็นปัญหาเพราะกล่องดูเหมือนจะมีความคาดหวังของหน้า ไม่ได้เปิดใช้งานการปิดอัตโนมัติ เซิร์ฟเวอร์ไม่ทำงาน: นี่คือเว็บไซต์ 24x7 ที่มีการใช้งานจำนวนมาก


3
เรามีปัญหาเดียวกันนี้ในเซิร์ฟเวอร์ของเรา (. NET application / Windows 2008 R2 / SQL Server 2008 R2 / SQL login) เป็นระยะ ๆ ; ฉันไม่สามารถติดตามสาเหตุที่เกิดขึ้น ... โดยพื้นฐานแล้วเราได้ลองทำในจุดนี้ เรามีปัญหานี้ใน. NET 3.5 ก่อนที่จะอัพเกรดเป็น 4.0 เช่นกัน ฉันชอบที่จะได้ยินว่ามีใครได้แก้ไขปัญหานี้!
Jon Seigel

1
@ jonSeigel สวัสดีจอห์นฉันมีการจัดการเพื่อตรวจสอบว่าเซิร์ฟเวอร์ที่เป็นปัญหาคือการใช้ ocnnection ร่วมกันอย่างถูกต้องโดยใช้เอกสารต่อไปนี้ในเหตุการณ์ที่ขยาย sqlserverpedia.com/blog/sql-server-bloggers/…ฉัน กำลังพยายามปรับ Xevents เพื่อค้นหาข้อมูลที่จำเป็นเพื่อให้ฉันได้รับผลรวมจำนวนพูลการเชื่อมต่อ
DamagedGoods

เซิร์ฟเวอร์มีปัญหาในการใช้การทำมิเรอร์หรือไม่? ฉันเห็นข้อความแสดงข้อผิดพลาดนี้บนเครื่องหลักเมื่อฐานข้อมูลล้มเหลวไปยังอุปกรณ์รอง
Max Vernon

คำตอบ:


5

1 - ไม่สามารถพูดได้อย่างแน่นอนฉันต้องไปหาเซิร์ฟเวอร์เพื่อขุดเข้าไปในตัวเอง

2 - ใช่ฉันเห็นสิ่งนี้เป็นครั้งคราวในสภาพแวดล้อมของฉันแม้ว่าเราจะไม่ได้อยู่ใน sql 2012 แต่ยังอยู่ในระบบที่เราเห็นสิ่งนี้ คุณอาจต้องการตรวจสอบhttp://blogs.msdn.com/b/psssql/archive/2013/02/13/breaking-down-18065.aspxแม้ว่าสถานะ 46 จะเกี่ยวข้องกับการมีฐานข้อมูลเฉพาะ = xxx ใน สตริงการเชื่อมต่อ db นั้นยังคงมีอยู่หรือไม่?

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

ความเป็นไปได้อื่นอาจเป็นปัญหา (เก่าไม่แน่ใจว่าเคยได้รับการแก้ไขจริงๆหรือไม่โปรดดูที่http://support.microsoft.com/kb/942861 ) ปัญหาเกี่ยวกับการตั้งค่า TCP Chimney Offload

3 - ความเข้าใจของฉันคือการรวมต้องใช้การจับคู่สตริงที่แน่นอนดังนั้นช่องว่างและลำดับของพารามิเตอร์ที่แตกต่างกันจะทำให้เกิดกลุ่มที่แตกต่างกัน (หากฉันผิดโปรดแจ้งให้เราทราบ)


4

คำตอบของ Wiki ในชุมชนเดิม แต่เดิมถูกทิ้งไว้เป็นความคิดเห็นโดยผู้เขียนคำถาม

ในกรณีของฉันมันกลายเป็นตารางบันทึกการหลบหนีที่ใครบางคนเปลี่ยนเป็น verbose เพื่อแก้ไขปัญหา แต่ลืมที่จะปิด มันจบลงด้วยการบันทึกได้ถึง 1,000 บันทึกต่อวินาที

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

ทันทีที่ฉันพบงานตบคนที่ละเมิดสิทธิของพวกเขาในเซิร์ฟเวอร์รอบหัวและหยุดงานข้อความผิดพลาดทั้งหมดสำหรับกลุ่มการเชื่อมต่อหยุด

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