คุณอาจพบปัญหาประสิทธิภาพการทำงานเมื่อใช้ค่าสัญพจน์ของวันที่ในการสอบถามที่วางจำหน่ายกับผู้ให้บริการ OLEDB สามจากเซิร์ฟเวอร์ SQL

การแปลบทความ การแปลบทความ
ปิด ปิด
หมายเลขบทความ (Article ID): 2000395 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

อาการ

พิจารณาสถานการณ์ต่อไปนี้::

คุณกำหนดค่าเซิร์ฟเวอร์ที่ถูกเชื่อมโยงจากอย่างใดอย่างหนึ่ง SQL Server 2005 หรือ SQL Server 2008 ไปยังเซิร์ฟเวอร์ฐานข้อมูลอื่นเช่น Oracle โดยใช้ตัวให้บริการ OLEDB ของตนเอง

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

สาเหตุ

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

การแก้ไข

ใช้ขั้นตอนต่อไปนี้เมื่อต้องการระยะไกลอย่างใดอย่างหนึ่งสายอักขระตัวอักษรสำหรับคอลัมน์ datetime ไปยังผู้ให้บริการการ OLEDB ของบริษัทอื่น

  1. กำหนดค่าเป็นพารามิเตอร์ที่ใช้ในการ datetime ในชุดงาน SQL ที่ประกอบด้วยการสอบถามที่วางจำหน่าย
  2. กำหนดค่าเป็นพารามิเตอร์ที่ใช้ในการ datetime ใน SQL ถูกเก็บไว้กระบวนงานที่มีพารามิเตอร์ datetime
  3. ใช้ฟังก์ชัน OpenQuery แทนแผนการตั้งชื่อ four-part เพื่อส่งการสอบถามทั้งหมดเป็นการเซิร์ฟเวอร์ระยะไกล
  4. สร้างตารางที่แยกต่างหากในฐานข้อมูล SQL กับคอลัมน์ datetime เติมข้อมูลให้กับทุกวันเป็นไปได้ของโปรแกรมประยุกต์อาจจะใช้ และใช้ แบบสอบถามย่อยที่ยึดตามตารางนั้นเป็น predicate ของอนุประโยคของตำแหน่งตามที่แสดงในตัวอย่างภายใต้การแก้ปัญหา 4 ในส่วน'รายละเอียดเพิ่มเติม'ด้านล่าง

ข้อมูลเพิ่มเติม

แบบสอบถามของตัวอย่าง:   SELECT * จาก OracleLinkedServerschema.datetable ซึ่ง d1 = ' 1/1/2009 '

แผนการดำเนินการ Resulting:

ตัวกรอง (โดยที่: ([OracleLinkedServer] ..[schema][datetable][d1 = ' 00:00:00.000 2009-01-01 '))
| --คำนวณ Scalar (DEFINE: ([OracleLinkedServer] ..[schema][datetable][ID = [OracleLinkedServer][schema][datetable][รหัส], [OracleLinkedServer][schema][datetable][D1] = [OracleLinkedServer][schema][datetable][d1]))
| -- Query(SOURCE:(OracleLinkedServer) ระยะไกล การสอบถาม: (SELECT "Tbl1002" "หมายเลข "" Col1004 " "Tbl1002"D1 "" Col1005 "FROM" SCHEMA"DATETABLE" "Tbl1002"))

ซึ่งอาจทำให้เกิดปัญหาประสิทธิภาพการทำงานได้เนื่องจากตารางทั้งหมดจากเซิร์ฟเวอร์ระยะไกลได้จะถูกนำมาใช้

วิธีแก้ปัญหาที่ 1:

ประกาศ datetime @ d
การตั้งค่า @ d = ' 1/1/2009 '
SELECT * จาก OracleLinkedServerPSS.DATETABLE ซึ่ง D1 = @ d

วิธีแก้ปัญหาที่ 2:

OraDateProc กระบวนงานที่สร้าง datetime @ d เป็น
OracleLinkedServer FROM select *PSS.DATETABLE ซึ่ง D1 = @ d

วิธีแก้ปัญหาที่ 3:

SELECT * จาก OPENQUERY(remote_server_name, SELECT * FROM SCHEMA.DATETABLE WHERE D1 = '1/1/2009')

วิธีแก้ปัญหาที่ 4:

SELECT * จาก OracleLinkedServerSCHEMA.DATETABLE ซึ่ง D1 = (เลือก date_literal จาก tblDateliterals ที่ใด date_literal = (เลือก convert(datetime,'1/1/2009'))

หมายเหตุ: ในตัวอย่างข้างต้น tblDateliterals คือตารางที่มีหนึ่งคอลัมน์date_literal ที่ประกอบด้วยค่าที่เป็นไปได้ทั้งหมดของตัวอักษรของวันที่คุณจำเป็นต้องใช้ในโปรแกรมประยุกต์ของคุณวิธีแก้ปัญหาด้านบนทำงานหากคุณใช้ฟังก์ชันแปลงในแบบสอบถามย่อยเท่านั้น

Note This is a "FAST PUBLISH" article created directly from within the Microsoft support organization. The information contained herein is provided as-is in response to emerging issues. As a result of the speed in making it available, the materials may include typographical errors and may be revised at any time without notice. See Terms of Use for other considerations.

คุณสมบัติ

หมายเลขบทความ (Article ID): 2000395 - รีวิวครั้งสุดท้าย: 21 ตุลาคม 2553 - Revision: 2.0
ใช้กับ
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Evaluation Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Standard
Keywords: 
kbmt KB2000395 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:2000395

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com