คิวรีเล็กทำงานได้ คิวรีใหญ่ล้มเหลว: ขนาดแพ็กเก็ตใดกันแน่?
แพ็กเก็ตของไดรเวอร์ SQL Server ขีดจำกัดข้อความของ MySQL และ MTU ของเส้นทาง IP เป็นหน่วยที่ต่างกัน ความล้มเหลวที่ขึ้นกับขนาดไม่ได้ทำให้สิ่งเหล่านี้ใช้แทนกันได้
คิวรีเล็กส่งคืนผลลัพธ์ คิวรีใหญ่ค้างหรือหลุด และความคิดแรกคือมีบางอย่างผิดกับขนาดแพ็กเก็ต ความคิดนั้นมักถูกและเกือบทุกครั้งเล็งไปที่ชั้นที่ผิด การตั้งค่าสามอย่างใช้คำว่าแพ็กเก็ตร่วมกันและวัดสามสิ่งที่ไม่เกี่ยวข้องกัน คือการบรรจุข้อมูลขนส่งของไดรเวอร์ฐานข้อมูล ขีดจำกัดข้อความของเซิร์ฟเวอร์ฐานข้อมูล และหน่วยส่งข้อมูลสูงสุดของเส้นทาง IP การปรับอย่างหนึ่งเพื่อแก้ปัญหาอาการที่เกิดจากอีกอย่างคือหนทางที่ปัญหาห้านาทีกลายเป็นหนึ่งสัปดาห์ของการปรับแต่ง ลำดับด้านล่างคือลำดับที่ใช้เวลาของผมน้อยที่สุด
สามชั้น หนึ่งคำร่วม
แต่ละแถวด้านล่างเป็นหน่วยต่างกันและมีเจ้าของต่างกัน และไม่มีแถวใดที่สรุปได้จากแถวอื่น ข้อความของฐานข้อมูลอาจครอบคลุมหลาย TCP segment และหลาย IP packet ดังนั้นการเพิ่มขนาดที่อนุญาตไม่ได้ทำให้เส้นทางกว้างขึ้น และการลดการตั้งค่าไดรเวอร์ไม่ใช่การดำเนินการเดียวกับการเปลี่ยน MTU ของอินเทอร์เฟซ คำนี้ปรากฏในไฟล์กำหนดค่าสามไฟล์ที่ต่างกัน จึงค้นหาแล้วได้สามคำตอบที่ไม่เกี่ยวข้องกัน อ่านข้อความข้อผิดพลาดก่อน แล้วจึงตัดสินใจว่าจะเปิดไฟล์ใด
| Setting or observation | Unit it describes |
|---|---|
| SQL Server client network packet setting | The provider's transport packaging for that connection |
| MySQL communication packet limit | A database message, such as one statement, row or replication event |
| IP path MTU | The largest IP packet the path carries without fragmentation handling |
เขียนลงไปว่าการดำเนินการที่ล้มเหลวเป็นของชั้นไหนก่อนเปิดไฟล์กำหนดค่า ข้อความข้อผิดพลาดมักบอกไว้ และส่วนนั้นคือส่วนที่คนข้ามไป
ระบุผู้ให้บริการก่อนเปลี่ยนการตั้งค่า
สำหรับ SQL Server บันทึกแอปพลิเคชัน ชื่อไดรเวอร์หรือผู้ให้บริการ เวอร์ชัน และการกำหนดค่าการเชื่อมต่อที่ใช้จริง สคริปต์วินิจฉัยและแอปเดสก์ท็อปอาจเข้าถึงเซิร์ฟเวอร์เดียวกันผ่านผู้ให้บริการต่างกัน การตั้งค่าที่ช่วยฝ่ายหนึ่งจึงไม่ได้พิสูจน์อะไรเกี่ยวกับอีกฝ่าย ค่าเริ่มต้นของผู้ให้บริการต่างกัน และฟิลด์ในสตริงการเชื่อมต่อที่ชื่อคล้ายกันไม่ใช่หลักฐานว่าผู้ให้บริการทุกรายตีความเหมือนกัน
อย่าสลับไดรเวอร์ที่ยังได้รับการดูแลเป็นตัวเก่าเพียงเพราะวิธีแก้แบบเก่าใช้ไวยากรณ์ของมัน เอกสารปัจจุบันไม่สนับสนุนการพัฒนาบนคอมโพเนนต์เก่าเหล่านั้น และการสืบทอดข้อจำกัดของมันเป็นการแลกเปลี่ยนที่ไม่ดีเพื่อการตั้งค่าหนึ่งอย่าง
การปฏิเสธข้อความไม่ใช่การหยุดของเส้นทาง
ใน MySQL 8.4 เอกสารแพ็กเก็ตการสื่อสารอธิบายว่าคำสั่ง แถว หรือเหตุการณ์ไบนารีล็อกที่ใหญ่เกินจะถูกปฏิเสธเทียบกับขีดจำกัดที่ใช้ และขีดจำกัดของทั้งไคลเอนต์และเซิร์ฟเวอร์อาจสำคัญ นั่นคือการปฏิเสธที่ชั้นฐานข้อมูล ไม่ใช่คำกล่าวที่ว่าเครือข่ายต้องขนส่ง IP packet ขนาดมหึมา อ่านข้อผิดพลาดจริงและรูปร่างของข้อความที่เป็นปัญหา ผลลัพธ์ใหญ่ที่ประกอบด้วยแถวเล็กจำนวนมากเป็นกรณีที่ต่างจากแถวใหญ่แถวเดียว และล้มเหลวต่างกัน
การติดตั้ง MariaDB ต้องการขีดจำกัดและเครื่องมือวินิจฉัยที่เอกสารระบุของเวอร์ชันตัวเอง การคัดลอกค่าเริ่มต้นของ MySQL ไปยัง MariaDB คือการเดาพร้อมขั้นตอนเพิ่ม
หลักฐานของเส้นทางมีหน้าตาอย่างไรจริง ๆ
ปัญหาเรื่องขนาดเส้นทางมีลายนิ้วมือของตัวเอง คือความล้มเหลวในการขนส่งที่เกิดซ้ำและขึ้นกับขนาดบนเส้นทางและตระกูลที่อยู่หนึ่ง ๆ โดยมีภาระเพิ่มของอุโมงค์เข้ามาเกี่ยวข้องและผลป้อนกลับจากการค้นพบทำงานตามที่เส้นทางอนุญาต การหมดเวลาเพียงอย่างเดียวไม่แยกมันออกจากคิวรีช้า บั๊กไดรเวอร์ หรือขีดจำกัดฝั่งเซิร์ฟเวอร์ และ การถือว่าการหมดเวลาเป็นหลักฐานของปัญหา MTU ส่งคุณไปยังชั้นที่ผิดอย่างมั่นใจ
ถ้าคุณทดสอบเส้นทาง ให้ตรึงปลายทาง บัญชี และภาระงานไว้ เพื่อให้ตัวแปรเดียวคือขนาดที่คุณกำลังตรวจ การทดสอบที่เปลี่ยนสามอย่างไม่บอกอะไรว่าสิ่งใดสำคัญ
เปลี่ยนตัวแปรที่เอกสารระบุหนึ่งตัว แล้วบันทึกไว้
ตรึงปลายทาง บัญชี ผู้ให้บริการ และภาระงานให้คงที่ บันทึกค่าเดิม ใช้การเปลี่ยนแปลงที่รองรับหนึ่งอย่าง แล้วบันทึกผลลัพธ์ การตั้งค่าที่เล็กลงซึ่งทำให้การทดสอบหนึ่งผ่านเป็นหลักฐานที่เป็นประโยชน์เกี่ยวกับสแตกที่ทดสอบนั้น มันไม่ใช่ค่าที่ดีที่สุดสากลและไม่ได้ชี้ว่าอะไรทำให้เกิดความล้มเหลวเดิม สิ่งเหล่านี้เป็นการกล่าวอ้างที่ต่างกัน และมีเพียงข้อแรกที่ได้รับการสนับสนุนจากการทดลองครั้งเดียว
แก้ขีดจำกัดที่ระบุได้ในชั้นของมันเอง แล้วบันทึกว่าเป็นชั้นใด บันทึกนั้นคือสิ่งที่กันไม่ให้คนถัดไปปรับแต่งไดรเวอร์เพราะปัญหาเดิมอยู่ที่เส้นทาง