SQL Server Management studio ช้าหรือหมดเวลาเชื่อมต่อเมื่อใช้ Windows Authentication


23

ฉันได้รับความล่าช้านานมาก (10 ~ 30 วินาที) ในสตูดิโอของ SQL Server 2014 การจัดการเมื่อพยายามที่จะเชื่อมต่อกับ 2012 อินสแตนซ์ของ SQL Server ผ่าน TCP ใช้Windows ตรวจสอบ สิ่งนี้เกิดขึ้นเมื่อเชื่อมต่อ Object Explorer หรือหน้าต่างแบบสอบถามว่างเปล่าใหม่ เมื่อเชื่อมต่อแล้วการเรียกใช้แบบสอบถามจะรวดเร็ว ปัญหาไม่เกิดขึ้นเมื่อฉันเชื่อมต่อโดยใช้การพิสูจน์ตัวตน SQL Server

สิ่งแวดล้อม:

  • Windows 7 เข้าสู่ระบบในฐานะผู้ใช้โดเมน
  • การเชื่อมต่อ TCP ผ่านที่อยู่ IP (ไม่ใช่ชื่อโฮสต์)
  • เซิร์ฟเวอร์อยู่ในสถานที่ห่างไกลที่เชื่อมต่อผ่าน VPN
  • ไม่มีการเข้ารหัส

เมื่อฉันเข้าสู่คอมพิวเตอร์ Windows 7 ของเพื่อนร่วมงานด้วยบัญชีโดเมนของฉันและเชื่อมต่อกับ SQL Server เดียวกันผ่าน VPN เดียวกันก็ไม่มีความล่าช้า เมื่อเพื่อนร่วมงานคนเดียวกันลงชื่อเข้าใช้พีซีของฉันด้วยบัญชีโดเมนของเขาเองเขาประสบความล่าช้า การทดสอบเหล่านี้แสดงว่าปัญหานั้นไม่เหมือนใครในพีซีของฉัน นอกจากนี้ปัญหาจะปรากฏเฉพาะเมื่อเชื่อมต่อกับ SQL Server และ VPN เฉพาะนี้ ฉันสามารถเชื่อมต่อกับเซิร์ฟเวอร์ SQL อื่น ๆ ในเครือข่ายท้องถิ่นผ่านทาง Windows Authentication โดยไม่ล่าช้า

สิ่งที่ฉันพยายามโดยไม่ประสบความสำเร็จ:

  • ปิดใช้งานโปรแกรมป้องกันไวรัสและไฟร์วอลล์
  • เปลี่ยนชื่อโฟลเดอร์ "12.0" ภายใต้ "% userprofile% \ AppData \ Roaming \ Microsoft \ SQL Server Management Studio" เป็น "_12.0" เพื่อบังคับให้ SSMS สร้างการตั้งค่าผู้ใช้ของฉันใหม่
  • โปรโตคอลกองทัพเครือข่าย TCP <default>มากกว่า ฉันลองใช้ Named Pipes แล้ว แต่เซิร์ฟเวอร์ของฉันไม่ได้ตั้งค่าไว้
  • ติดตั้ง SSMS 2012 แล้วลองใช้แทน 2014
  • ปิดใช้งาน IPv6
  • Blackholed crl.microsoft.com ถึง 127.0.0.1 ในไฟล์ etc \ hosts ของฉัน
  • ปิดใช้งานโปรแกรมปรับปรุงประสบการณ์การใช้งานของลูกค้าใน SSMS, Visual Studio และ Windows
  • ถอนการติดตั้งแอพที่เกี่ยวข้องกับ SQL Server ทั้งหมดจากพีซีของฉันและติดตั้งใหม่ในปี 2012

เคล็ดลับ TCPView:

  • ใช้ TCPView ผมสังเกตเห็นว่าเมื่อฉันทำให้การเชื่อมต่อใหม่ของรัฐกลายเป็นก่อตั้งขึ้นทันที แต่แล้วหนึ่งหรือสองการเชื่อมต่อมากขึ้นด้วย SQL Server จะพยายามอย่างต่อเนื่องและปิดด้วย TIME_WAIT ในคอมพิวเตอร์ของเพื่อนร่วมงานของฉันการเชื่อมต่อเหล่านี้ถูกสร้างขึ้นและมั่นคง ดังนั้นฉันค่อนข้างแน่ใจว่านี่คือที่มาของการหมดเวลา แต่สิ่งที่เชื่อมต่อและทำไมพวกเขาล้มเหลว? (ฉันไม่มีส่วนเสริมใด ๆ ใน SSMS ของฉัน)

ความคิดใด ๆ

อัปเดต: Intellisense / เบาะแสการเติมข้อความอัตโนมัติ (?):

ฉันสังเกตเห็นว่าในที่สุดเมื่อฉันเชื่อมต่อ Intellisense / การเติมข้อความอัตโนมัติไม่ทำงาน สิ่งเหล่านั้นต้องการการเชื่อมต่อแยกจาก SSMS หรือไม่? ฉันพยายามปิดการใช้งานและดูเหมือนจะไม่สามารถแก้ไขปัญหาการเชื่อมต่อที่ล่าช้าได้


คุณลองใช้ SSMS ด้วยสวิตช์ / log แล้วหรือยัง
นาย Magoo

@MisterMagoo ลองตอนนี้ มันไม่ได้บันทึกอะไรเลยเกี่ยวกับความพยายามในการเชื่อมต่อของมัน (ไฟล์จะไม่เติบโตเมื่อทำการเชื่อมต่อใหม่) ส่วนใหญ่จะเป็นสิ่งที่เกี่ยวกับการโหลดแพคเกจบางอย่างใน UI เช่น "การโหลดส่วนประกอบแอสเซมบลีจากแคชสำเร็จ" ฉันหาข้อผิดพลาดหรือข้อยกเว้นไม่พบ
Jordan Rieger

ตกลงฉันไม่แน่ใจว่ามันจะ แต่คิดว่ามันคุ้มค่าลองอย่างรวดเร็ว หากคุณสนใจในสิ่งที่เกิดขึ้นจริง ๆ คุณอาจต้องแยกวิเคราะห์ Sysinternals Process Monitor และดูว่าคุณสามารถระบุสิ่งที่เกิดขึ้นได้หรือไม่ technet.microsoft.com/en-us/library/bb896645.aspx
Mister Magoo

ฉันได้อ่านข้อมูลเกี่ยวกับ ProcMon แล้วประมาณหนึ่งชั่วโมง แต่มีเหตุการณ์มากมาย (แม้แต่กรองลงใน Ssms.exe) ที่ฉันไม่สามารถทำอะไรได้มากนัก
Jordan Rieger

@MisterMagoo ทั้งหมดที่ฉันเห็นคือความพยายามในการเชื่อมต่อที่ฉันเห็นด้วย TcpView ใช้เวลานานจริง ๆ (มากกว่า 5 วินาทีต่อครั้ง) ฉันกำลังเห็นเหตุการณ์ "การเชื่อมต่อ TCP" บนพอร์ตเฉพาะและจากนั้นในครั้งถัดไปที่ฉันเห็นสิ่งที่ส่งหรือรับบนพอร์ตภายในเครื่องนั้นจะอยู่หลังเวลาอย่างน้อย 5 วินาที
Jordan Rieger

คำตอบ:


19

ลองรันการติดตามด้วย SQL Profiler ในขณะที่คุณและผู้ร่วมงานของคุณเชื่อมต่อกับเซิร์ฟเวอร์
เลือก RPC, คำชี้แจง SQL & การเชื่อมต่อล่วงหน้า - การเริ่มต้น / เสร็จสิ้น
เลือกตัวเลือกบันทึกผลลัพธ์ไปยังตารางจากนั้นเปรียบเทียบ 2 ตารางเพื่อค้นหาคอขวด

หรือเนื่องจากคุณเชื่อมต่อด้วย IP อาจเป็นการค้นหา Reverse DNS ถ้าเป็นเช่นนั้นเพิ่มรายการในไฟล์โฮสต์ของคุณ


2
ฉันเพิ่มรายการท้องถิ่น / โฮสต์สำหรับที่อยู่ IP ของเซิร์ฟเวอร์ของฉันจากนั้นลอง SSMS อีกครั้ง บิงโก! เร็วมาก. ขอขอบคุณ! (ฉันออกจากการเชื่อมต่อ SSMS ผ่านที่อยู่ IP เหมือนเมื่อก่อนไม่ใช่ชื่อโฮสต์) ฉันแค่สงสัยว่าทำไมฉันจึงต้องการวิธีแก้ปัญหานี้ แต่เพื่อนร่วมงานของฉันไม่ทำ ดูเหมือนว่าจะเกี่ยวข้องกับ DNS ไม่ว่าในกรณีใดนี่เป็นทางออกที่ดีสำหรับฉันดังนั้นฉันจะให้รางวัลแก่คุณเมื่อคุณอัปเดตคำตอบของคุณ
Jordan Rieger

ฉันคิดว่ามันเป็นการค้นหาแบบย้อนกลับเพราะเมื่อฉันลบรายการโฮสต์ ping - ###. ###. ###. ### ช้ามากก่อนที่ ping แรก (หยุด 5 วินาทีสำหรับการค้นหาแบบย้อนกลับ) เมื่อเพิ่มกลับรายการโฮสต์ ping -a นั้นรวดเร็ว แม้ว่า tracert หรือ nslookup ไม่แตกต่างกัน ฉันคิดว่าบางสิ่งบางอย่างจะต้องแตกต่างไปจากพีซีของฉันที่ทำให้ฉันต้องค้นหาแบบย้อนกลับเมื่อเพื่อนร่วมงานของฉันไม่ได้ (หรือเร็วกว่าพวกเขามาก) BTW Intellisense ของฉันทำงานได้อีกครั้งในขณะนี้
Jordan Rieger

แม้แต่รายการ DNS ปลอมสำหรับ IP ในไฟล์โฮสต์ทำให้การทำงานนี้เร็วขึ้นมาก! ขอขอบคุณ!
felickz

ฉันได้รับการหมดเวลาพยายามเชื่อมต่อ SSMS ผ่าน VPN จนกว่าฉันจะอ่านคำตอบของคุณใช่มันสมเหตุสมผลแล้วเพราะฉันกำลังเชื่อมต่อกับเซิร์ฟเวอร์ผ่าน IP และการจำแนกชื่อไม่ทำงาน ในที่สุดการเพิ่มรายการในไฟล์โฮสต์ทำให้มันใช้งานได้หลังจากผ่านไปหลายชั่วโมงเพื่อให้มันทำงานได้ ขอบคุณ! เป็นเชิงอรรถที่ฉันต้องการจะบอกว่าฉันใช้การตรวจสอบ Windows จากโดเมนที่แตกต่างกับ runas / netonly และทำงานได้ดีกับโซลูชั่นนี้
RobbZ

5

สิ่งที่คุณควรตรวจสอบก่อนคือการตั้งค่า DNS หรือเซิร์ฟเวอร์ของคุณ

ไม่ใช่เรื่องยากที่ SQL Server ของคุณมีปัญหาในการเชื่อมต่อกับ Active Directory หากคุณลองใช้บัญชี Windows ในพื้นที่ฉันมั่นใจว่าคุณจะไม่มีปัญหา ไม่ใช่เรื่องผิดปกติที่เซิร์ฟเวอร์นั้นได้รับการกำหนดค่าด้วย DNS อินเทอร์เน็ตสาธารณะและเมื่อ SQL Server เชื่อมต่อกับ DC เพื่อตรวจสอบข้อมูลประจำตัวและตรวจสอบเซิร์ฟเวอร์จะลองติดต่อ DNS สาธารณะแทนเซิร์ฟเวอร์ DNS ของโฆษณา เนื่องจากข้อมูลนี้ไม่ได้เก็บไว้ใน DNS สาธารณะมันจะล้มเหลวในการตรวจสอบและจะทำให้เกิดความล่าช้าจนกว่าจะสามารถติดต่อกับเซิร์ฟเวอร์ DNS ที่เหมาะสมหรือ DC ผ่าน NTLM

เนื่องจากคุณไม่ประสบปัญหากับเซิร์ฟเวอร์ SQL อื่น ๆ เกือบจะแน่นอนว่าปัญหาไม่เกี่ยวข้องกับการกำหนดค่า AD หรือ DC

ดำเนินการIPConfig.exe /คำสั่งทั้งหมดจาก cmd เพื่อตรวจสอบเซิร์ฟเวอร์ DNS ที่กำหนดค่า คุณควรมีการกำหนดค่าเซิร์ฟเวอร์ DNS ของโฆษณาเท่านั้น ลบเซิร์ฟเวอร์ DNS สาธารณะทั้งหมดออกจากเซิร์ฟเวอร์ DNS ของ AD


คุณกำลังแนะนำว่า SQL Server กำลังติดต่อ DNS สาธารณะเพื่อค้นหาที่อยู่ IP ของตัวควบคุมโดเมนและนั่นทำให้เกิดความล่าช้าเมื่อพยายามตรวจสอบความถูกต้อง Windows ของฉันหรือไม่ หากเป็นเช่นนั้นเหตุใดจึงทำงานได้ดีจากพีซีของเพื่อนร่วมงานของฉันในเครือข่ายท้องถิ่นเดียวกันบน VPN เดียวกัน ฉันตรวจสอบการตั้งค่า DNS บนคอมพิวเตอร์ของฉันและมีเซิร์ฟเวอร์ DNS ตัวที่สามเพิ่มเติมที่แผนก IP ของฉันขอให้ฉันเพิ่มซึ่งไม่ได้แสดงในพีซีของเพื่อนร่วมงานของฉัน แต่เมื่อฉันลบเซิร์ฟเวอร์นั้นทำ ipconfig / flushdns และลองอีกครั้งมันก็ยังช้า
Jordan Rieger

การใช้ที่อยู่ IP หรือ FQDN ของเซิร์ฟเวอร์ (ไม่ใช่แค่ชื่อโฮสต์) ทำให้ฉันแตกต่างกันมาก เป็นปัญหา DNS ช้าในกรณีของฉัน
userSteve

0

ฉันขยายC:\Windows\System32\drivers\etc\hostsไฟล์โดยเพิ่มบรรทัดดังนี้:

201.202.203.204     mysqlserver

201.202.203.204 เป็นที่อยู่ IP ของ SQL Server ของคุณ

mysqlserver - ชื่อใด ๆ ที่คุณชอบ (คุณไม่จำเป็นต้องใช้มันทุกที่)

นี่ทำให้เซิร์ฟเวอร์ของฉันเร็วขึ้น

ขอบคุณ: d -_- b, Jordan, Rieger, felickz, RobbZ


0

ปิดไฟร์วอลล์ Windows บนเซิร์ฟเวอร์ SQL ของคุณสำหรับโปรไฟล์เครือข่ายโดเมน

  • เริ่ม Powershell
  • เรียกใช้Get-NetFirewallProfile -Profile Domainเพื่อตรวจสอบสถานะปัจจุบัน
  • หากเปิดใช้งานอยู่ให้เรียกใช้: Set-NetFirewallProfile -Profile Domain -Enabled Falseเพื่อปิด

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

สิ่งที่แปลกคือแม้ว่า Windows Firewall จะบล็อกการสื่อสารคุณจะยังคงสามารถเชื่อมต่อได้ แต่การจับมือเริ่มต้นและคำขอต่อมาจะช้าอย่างไม่น่าเชื่อ ทฤษฎีของฉัน (ไม่มีหลักฐานจริง) คือในกรณีนี้การสื่อสารตกลงบน Named Pipes ซึ่งช้ากว่ามากระหว่างพีซีระยะไกล

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