ArcGIS 10.2 Query Layer บนประสิทธิภาพของ SQL Server


10

ฉันใช้ Query Layer บน SQL Server ใน ArcMap Query Layer ดำเนินการทันทีใน SQL Server แต่ใช้เวลานานในการดึงข้อมูลใน ArcMap ซึ่งระบบจะไม่ตอบสนองเป็นเวลาประมาณ 10 นาทีหรือนานกว่านั้น ในระหว่างการวาด ArcMap CPU ตัวใดตัวหนึ่งจะถูก maxed out ในกระบวนการ SQL Server

My Query คือ STIntersects ของบัฟเฟอร์บนฟีเจอร์ Line (Shannon) เทียบกับฟีเจอร์รูปหลายเหลี่ยม (Townlands) ดังนี้

SELECT TOWNLANDS.TL_ID,TOWNLANDS.Shape FROM dbo.TOWNLANDS as townlands
with(index(FDO_Shape)) 
JOIN dbo.Shannon on townlands.Shape.STIntersects 
(Shannon.Shape.STBuffer(2.0))=1

แบบสอบถามส่งคืน 186 แถวทันที สิ่งเหล่านี้สามารถวาดในบานหน้าต่าง SQL Studio Management Spatial บานหน้าต่างโดยไม่มีปัญหา

เมื่อฉันสร้าง Query Layer ใน ArcMap ด้วยไวยากรณ์เดียวกันระบบจะไม่ตอบสนอง แต่จะวาดในที่สุด ดูเหมือนว่าบางที ArcMap ไม่ได้ใช้ดัชนีเชิงพื้นที่หรือกำลังทำเช่นนั้นแตกต่างจาก SQL Server ทำให้เกิดการสอบถามที่ไม่มีประสิทธิภาพบน SQL Server ที่ต้องใช้อายุในการส่งคืน

ใครสามารถให้คำแนะนำเกี่ยวกับวิธีการรักษา?

ขอบคุณ

ArcGIS Desktop: 10.2
ArcSDE: 10.2
RDBMS: Database and version: SQL Server 2008
OS: Windows Server 

คำตอบ:


3

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

คำสั่ง SQL เชิงพื้นที่เช่นเดียวกับที่คุณใช้ได้รับอนุญาตเมื่อเร็ว ๆ นี้ด้วยการแนะนำของรูปทรงเรขาคณิต SQL Server 2008 สำหรับ ArcSDE รองรับประเภทข้อมูลเรขาคณิตสามชนิด, SDEBINARY, GEOMETRY และ GEOGRAPHY ความแตกต่างอยู่ที่นี่

เพื่อประสิทธิภาพที่ดีที่สุดตรวจสอบให้แน่ใจว่าคุณใช้เรขาคณิตหรือภูมิศาสตร์ (ไม่ใช่ SDEBINARY แม้ว่าจะล้าสมัยและไม่แนะนำ) ขึ้นอยู่กับลักษณะของข้อมูลของคุณไม่ว่าคุณจะใช้การอ้างอิงเชิงพื้นที่ของโลกหรือไม่ ตรวจสอบให้แน่ใจว่าได้สร้างดัชนีเชิงพื้นที่บนฟีเจอร์คลาสของ TOWNLANDS อีกครั้ง คุณสามารถทำได้จาก ArcCatalog โดยคลิกขวาที่ featureclass คุณสมบัติและเลือกแท็บดัชนี

หวังว่าจะช่วย


1

ฉันไม่เห็นข้อความค้นหาของคุณเกี่ยวกับการเข้าร่วม ลองใช้ WHERE แทน

SELECT TOWNLANDS.TL_ID,TOWNLANDS.Shape 
FROM dbo.TOWNLANDS as townlands
with(index(FDO_Shape)) 
WHERE townlands.Shape.STIntersects 
(Shannon.Shape.STBuffer(2.0))=1

ในแบบสอบถามเดิมการเข้าร่วมปรากฏว่าไม่มีประโยชน์ต่อผลลัพธ์ ฉันไม่เห็นคอลัมน์ใด ๆ จากตารางแชนนอนในบรรทัดที่เลือก ดังนั้นดูเหมือนว่างานพิเศษ


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

1

นี่เป็นข้อ จำกัด ที่ทราบกันดีในการใช้ ArcGIS กับ SQL Server ที่ไม่มีการแก้ไขอย่างง่ายเท่าที่ฉันทราบ

หากผู้วางแผนคิวรี SQL Server ตัดสินใจว่าต้องการ CPU มากกว่าหนึ่งตัวในการดำเนินการแบบสอบถามอัตราเดิมพันของดัชนีเชิงพื้นที่ที่ใช้จะต่ำ

Microsoft ทราบถึงปัญหานี้แล้ว แต่ไม่รีบเร่งในการปรับปรุงตัววางแผนคิวรีเนื่องจากมันจะส่งผลกระทบต่อคิวรีทั้งหมด

วิธีแก้ปัญหาที่เชื่อถือได้เพียงอย่างเดียวคือการตั้งค่าระดับสูงสุดของการขนาน (MAXDOP) ในฐานข้อมูลของคุณเป็น 1 แต่หมายความว่าการสืบค้นทั้งหมดในฐานข้อมูลนั้นจะใช้ 1 CPU ต่อการสืบค้นเท่านั้นทำให้ช้าลงทุกอย่าง

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


0

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

ตารางมีการโหลดคลาสความสัมพันธ์ที่แนบกับมัน สิ่งเหล่านี้จะส่งผลต่อประสิทธิภาพการสืบค้น / การวาดหรือไม่

นอกจากนี้คุณยังสามารถชี้ให้ฉันไปในทิศทางที่ Microsoft รับทราบปัญหานี้ได้ ฉันสามารถบังคับให้ผู้วางแผนคิวรีใช้ดัชนีอวกาศได้หรือไม่

บิล


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