ความเสี่ยงในการเปลี่ยนเป็น ARITHABORT ON


12

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

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

ดังนั้นดูเหมือนว่าเพื่อที่จะใช้มุมมองที่มีการจัดทำดัชนีฉันต้องมีแอปพลิเคชันหลักSET ARITHABORT ONทุกครั้งที่แทรก / ปรับปรุงตารางหลัก ฉันวิ่งในสภาพแวดล้อมการทดสอบของฉัน:

ALTER DATABASE MyDatabase SET ARITHABORT ON;

และดูเหมือนว่าจะทำงานได้ดี แต่ผู้ขายของฉันบอกว่าเนื่องจากแอปพลิเคชันมีการค้นหาหลายพันครั้งอาจมีความเสี่ยงที่การตั้งค่านี้อาจทำลายหนึ่งในการค้นหาเหล่านี้และหากเรามีปัญหาฐานข้อมูลที่ไม่คาดคิดในอนาคตพวกเขาจะยืนยันว่าจะคืนค่าเริ่มต้น

มีคำถามที่เกิดขึ้นจริงที่จะถูกทำลายโดยSET ARITHABORT ON? มีสถานการณ์ใดบ้างที่จะรักษาไว้ได้ดีกว่าOFF?

TL; DR สำหรับมุมมองที่จัดทำดัชนีใหม่ของฉันเพื่อการทำงานฉันต้องตั้งค่าARITHABORT ONฐานข้อมูลทั้งหมด แต่ผู้ขายของฉันเตือนว่ามันจะเป็นความเสี่ยงของตัวเอง มีความเสี่ยงหรือไม่?

คำตอบ:


9

ดังนั้นSET ARITHABORT ON โดยทั่วไปจะพูดว่า "ถ้าการหารด้วยข้อผิดพลาดเป็นศูนย์เกิดขึ้นหรือมีการคำนวณทางคณิตศาสตร์มากเกินไปให้ยกเลิกการสืบค้น" นี่เป็นพฤติกรรมที่พึงประสงค์และเป็นค่าเริ่มต้นที่กว้าง หากสิ่งนี้ทำให้เกิดปัญหากับการสอบถามของผู้จัดจำหน่ายของฉันฉันจะบอกว่าพวกเขาอาจได้รับความทุกข์ทรมานจากปัญหาการเข้ารหัสบางอย่างที่จะเริ่มต้นด้วย ฉันจะขอรายละเอียดเพิ่มเติมว่าทำไมพวกเขาถึงกังวลที่นี่

จากกฎทั้งหมดของมุมมองที่มีการจัดทำดัชนีฉันจะเรียกสิ่งนี้และตัวเลือกการตั้งค่าจำนวนมากที่ถกเถียงกันน้อยที่สุด

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

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


7

ความเสี่ยงที่ชัดเจนจากการเปลี่ยนแปลงนี้คือแบบสอบถามของผู้ขายที่รันอย่างถูกต้องก่อนหน้านี้อาจเริ่มผิดพลาดหรือส่งคืนผลลัพธ์ที่ไม่ถูกต้อง ARITHABORTการตั้งค่าบางส่วนควบคุมว่าล้นเลขคณิตและการหารด้วยศูนย์ข้อผิดพลาดกลับมาเป็นNULLผลยกเลิกคำสั่งที่มีข้อผิดพลาดหรือยุติชุดที่มีข้อผิดพลาด วิธีที่รหัสผู้ขายอาจตอบสนองต่อรหัสที่เกิดข้อผิดพลาดแทนที่จะส่งคืนNULLไม่ใช่สิ่งที่คุณต้องการทดสอบกับระบบที่ใช้งานจริง :)

อย่างไรก็ตามความเสี่ยงที่ต่ำกว่าระดับความเข้ากันถ้าฐานข้อมูลของคุณเป็น 90 SET ANSI_WARNINGS ONหรือสูงกว่าและการทำงานกับ การตั้งค่านี้จะต้องเกิดขึ้นONเมื่อคุณทดสอบมุมมองที่จัดทำดัชนี แต่คุณต้องยืนยันการตั้งค่าที่มีประสิทธิภาพที่ใช้โดยการเชื่อมต่อแอปพลิเคชันผู้ขายของคุณ Management Studio อาจถูกกำหนดค่าให้ใช้SETตัวเลือกที่แตกต่างจากที่กำหนดโดยรหัสผู้จำหน่ายเมื่อเชื่อมต่อ (และคุณไม่สามารถแทนที่พวกนั้นด้วยฐานข้อมูลหรือค่าเริ่มต้นของอินสแตนซ์) ตรวจสอบกับผู้จำหน่ายและยืนยันโดยการติดตามรหัสผู้จำหน่ายโดยใช้ SQL Server Profiler

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

-- Recommended effective settings
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT, 
    CONCAT_NULL_YIELDS_NULL, 
    QUOTED_IDENTIFIER, 
    ANSI_NULLS, 
    ANSI_PADDING,
    ANSI_WARNINGS ON;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.