SQL Server: เราควรใช้ TCP หรือ Named Pipes หรือใช้ค่าเริ่มต้นหรือไม่


17

เมื่อเชื่อมต่อกับ SQL Server 2008 R2 จากแอปพลิเคชันไคลเอนต์. NET 4 บนเซิร์ฟเวอร์ที่แตกต่างกันใน LAN เดียวกันคุณสามารถตั้งค่าโปรโตคอลเครือข่ายที่แตกต่างกันสามแบบ:

  1. TCP
  2. ท่อที่มีชื่อ
  3. อย่าตั้งค่าใด ๆ ในสตริงการเชื่อมต่อและใช้ค่าเริ่มต้น

แนวปฏิบัติที่ดีที่สุดคืออะไร? จะเลือกอะไรดี?

ข้อมูลเพิ่มเติม: ทั้ง TCP และเนมไปป์มีการเปิดใช้งานทั้งบนเซิร์ฟเวอร์และไคลเอนต์ แอปพลิเคชันใช้การจำลองฐานข้อมูล ไคลเอ็นต์และเซิร์ฟเวอร์สื่อสารผ่าน LAN ที่รวดเร็ว

เรากำลังตรวจสอบสิ่งนี้เพราะเรามีปัญหาการเชื่อมต่อและการหมดเวลาที่หายากและไม่จริง (แต่ไม่ว่าฉันต้องการรู้วิธีปฏิบัติที่ดีที่สุด)

มีบทความเกี่ยวกับเรื่องนี้ใน MSDNแต่มันเป็นเรื่องทั่วไปและคลุมเครือ ไม่แนะนำหรือแนะนำสิ่งที่มีประโยชน์


2
@ccook ฉันเชื่อว่ามันเป็นเช่นนั้น ฉันยังพบว่ามีtcp:การกำหนดค่าเป็นส่วนหนึ่งของสตริงการเชื่อมต่อส่วนใหญ่ในสภาพแวดล้อมของ บริษัท ที่แตกต่างกันในภายหลัง ฉันคิดว่าพวกเขาพบปัญหาที่คล้ายกัน
usr

1
ฉันไม่มั่นใจพอที่จะโพสต์ว่าเป็นคำตอบ แม้ว่าจะเป็นเรื่องแปลก แต่ปัญหาที่ร้ายแรงก็ยังไม่ปรากฏ ต้องหายากมากหรือยากที่จะทำซ้ำ @ccook
usr

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

1
@ ปรุงฉันมีความคิดใหม่ การแชร์ไฟล์ Windows ไม่น่าเชื่อถืออย่างแน่นอน หลายข้อผิดพลาดและการเชื่อมต่อล้มเหลวจะเห็นหลาย มันยาก แต่ยาก / เป็นไปไม่ได้ที่จะวินิจฉัย เมื่อใช้ pipes ที่มีชื่อคุณจะดึงเทคโนโลยีทั้งหมดนี้ไปใช้ในการปรับใช้ SQL Server ดูเหมือนว่าไม่ฉลาดในพื้นที่ทั่วไป
usr

1
ตกลง tcp จนถึงตอนนี้ดูเหมือนว่าจะจัดการกับปัญหา เรากำลังรอสักครู่เพื่อยืนยันว่า
ccook

คำตอบ:


18

ฉันชอบ TCP / IP มากกว่า Named Pipes แม้ว่าในสถานการณ์ส่วนใหญ่จะไม่มีความแตกต่างที่สังเกตได้ คุณสามารถทำได้โดยการปรับโปรโตคอลที่สนับสนุนโดยอินสแตนซ์ใน SQL Server Configuration Manager แทนการเข้ารหัสสิ่งที่ยากในสตริงการเชื่อมต่อของคุณ (ซึ่งทำให้ง่ายต่อการเปลี่ยนแปลงหรือแก้ไขปัญหา)

โดยพื้นฐานแล้วการกำหนดเส้นทางและค่าใช้จ่ายอื่น ๆ ที่เกี่ยวข้องกับการตั้งชื่อไปป์ (ยกเว้นว่าแอพของคุณอยู่ในเครื่องเดียวกับ SQL Server ซึ่งในกรณีที่มีค่าใช้จ่ายเพิ่มเติมเล็กน้อย) ทำให้เป็นตัวเลือกที่มีประสิทธิภาพน้อยลงโดยเฉพาะอย่างยิ่ง (100MB หรือน้อยกว่า) หรือหากปริมาณงานของคุณเข้ามา

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

คุณสามารถอ่านข้อมูลเกี่ยวกับข้อดีประสิทธิภาพการทำงานของ TCP / IP ในรายละเอียดเพิ่มเติม


ดังนั้นโดยทั่วไปแล้วมันไม่สำคัญมากนัก แต่โดยทั่วไปแล้วจะเหมาะกับ TCP เพราะไม่มีเหตุผลที่จะเลือกไพพ์ที่มีชื่อ คุณเห็นด้วยกับบทสรุปนั้นไหม?
usr

1
@usr มันเป็นเรื่องสำคัญเมื่อคุณปรับขนาดหรือหากเครือข่ายของคุณแย่ แต่โดยทั่วไปแล้วไม่มีประโยชน์จริง ๆ ในการเลือกชื่อท่อในทุกกรณีที่ฉันรู้
Aaron Bertrand

7

โปรโตคอลเนมไปป์นั้นมีประโยชน์สำหรับแอปพลิเคชั่นที่ได้รับการออกแบบรอบ ๆ NetBIOS หรือโปรโตคอลบน LAN อื่น ๆ

เนมไปป์ช่วยให้เข้าถึงการเรียกขั้นตอนระยะไกล (RPC) ได้ง่ายภายในโดเมนความปลอดภัยเดียวจึงเป็นข้อได้เปรียบสำหรับแอปพลิเคชันเหล่านี้

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

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