ทำไมแอป SQL ที่พูดมากจึงคลานผ่าน VPN และควรจัดกลุ่มอะไร
หน้าจอที่ยิงคำสั่งขึ้นกับกันหนึ่งร้อยครั้งจ่ายค่าการเดินทางไปกลับหนึ่งร้อยครั้ง นับการรอ จัดกลุ่มคำสั่งที่ไม่ขึ้นต่อกัน แล้วจึงย้ายการประมวลผล
ฟอร์มที่เปิดในเสี้ยววินาทีบนเครือข่ายท้องถิ่นใช้เวลาห้าวินาทีผ่าน VPN ขณะที่การคัดลอกไฟล์บนลิงก์เดียวกันวิ่งด้วยความเร็วเต็มที่ ความต่างไม่ใช่แบนด์วิดท์ ฟอร์มรอชุดคำตอบและจ่ายการเดินทางไปกลับเต็มรูปแบบในทุกขั้น ขณะที่การคัดลอกไฟล์เก็บไบต์ให้ลอยอยู่ตลอดเวลา นับการรอเหล่านั้นก่อนที่คุณจะแตะสายการเข้าถึง
อาการคือหน้าจอ ไม่ใช่คำสั่ง
ทุกคำสั่งบนหน้าจอนั้นอาจเร็วได้และหน้าจอยังช้าได้ เพราะยอดรวมคือผลบวกของการรอ ไม่ใช่ผลบวกของเวลาประมวลผล คำสั่งที่ทำงานในสองมิลลิวินาทียังคงเสียการเดินทางไปกลับเต็มรอบเมื่อไคลเอนต์ต้องได้รับผลลัพธ์ก่อนส่งคำสั่งถัดไป บนเส้นทางที่มีความหน่วงสี่สิบมิลลิวินาที การเรียกที่ขึ้นต่อกันหนึ่งร้อยครั้งรวมกันได้ประมาณสี่วินาทีก่อนงานวาดภาพใดๆ จะเริ่ม การคำนวณนี้เป็นแบบจำลองของการรอ ไม่ใช่การวัดลิงก์ของคุณ
นั่นคือเหตุผลที่การทดสอบความเร็วดูเหมือนไร้เดียงสา การถ่ายโอนจำนวนมากวัดอัตราการส่งผ่าน ฟอร์มที่พูดมากวัดความหน่วง และ VPN อาจยอดเยี่ยมในด้านหนึ่งขณะที่ยังธรรมดาในอีกด้านหนึ่ง การวินิจฉัยหน้าจอจึงหมายถึงการวัดหน้าจอ ไม่ใช่ลิงก์
บันทึกเวลาตั้งแต่ต้นจนจบของการกระทำของผู้ใช้หนึ่งครั้งก่อนเปลี่ยนแปลงสิ่งใด ตัวเลขนั้นเป็นเส้นฐานเดียวที่บอกได้ว่าการแก้ไขภายหลังได้ผลหรือไม่
นับการรอแบบต่อเนื่องในการกระทำของผู้ใช้หนึ่งครั้ง
วัดที่ไคลเอนต์แทนการเดา ใน psql \timing on พิมพ์เวลาที่ผ่านไปของแต่ละคำสั่ง และ EXPLAIN (ANALYZE, BUFFERS) แสดงว่าเซิร์ฟเวอร์ใช้เวลาเหล่านั้นไปกับงานจริงเท่าไร
ช่องว่างระหว่างสองตัวเลขนั้นคือค่าใช้จ่ายเครือข่ายและไคลเอนต์ของคุณ หากคำสั่งทำงานในสองมิลลิวินาทีและไคลเอนต์บันทึกได้หกสิบ ที่เหลืออีกห้าสิบแปดคือการเดินทางและการประมวลผลในเครื่อง และไม่มีดัชนีใดจะลบมันออกได้ ทำการเปรียบเทียบนี้ซ้ำกับทุกคำสั่งที่หน้าจอส่งออก และรวมช่องว่างแทนที่จะรวมเวลาประมวลผล
เขียนผลลัพธ์เป็นจำนวนการรอแบบต่อเนื่อง นั่นคือปริมาณที่สองหัวข้อถัดไปสามารถลดได้ และเป็นตัวเลขที่คุณโต้แย้งได้ด้วยหลักฐาน
จัดกลุ่มการเรียกที่ไม่ขึ้นต่อกัน เก็บการเรียกที่ขึ้นต่อกันไว้
สองคำสั่งที่ไม่อ่านผลลัพธ์ของกันและกันสามารถเดินทางร่วมกันและถูกรวบรวมครั้งเดียว ซึ่งเปลี่ยนการรอสองครั้งเป็นหนึ่งครั้ง สองคำสั่งที่คำสั่งที่สองต้องใช้ค่าจากคำสั่งแรกทำไม่ได้ เพราะการขึ้นต่อกันเป็นเรื่องจริงและการจัดกลุ่มจะเปลี่ยนสิ่งที่โปรแกรมทำ แยกการเรียกออกเป็นสองกองนั้นก่อนเขียนใหม่สิ่งใด และขนาดของแต่ละกองบอกว่าอะไรเป็นไปได้
งานแบบเซตขจัดการรอได้อย่างทั่วถึงกว่าการจัดกลุ่ม คำสั่งเดียวที่คืนแถวที่ลูปเคยดึงทีละแถวขจัดทั้งลูปและการเดินทางไปกลับ มองหาลูปก่อน เพราะมักเป็นกำไรที่ใหญ่กว่าและการเปลี่ยนแปลงที่ตรวจสอบได้ง่ายกว่า
กลุ่มยังต้องรักษาการจัดการข้อผิดพลาดและ ขอบเขตของทรานแซกชัน การต่อคำสั่งที่ไม่เกี่ยวข้องกันเป็นสตริงเดียวมิใช่การปรับให้เหมาะสมที่ปลอดภัย และกลุ่มที่ซ่อนคำสั่งที่ล้มเหลวไว้หลังการส่งที่สำเร็จนั้นแย่กว่าการรอที่ประหยัดได้
ใช้การเชื่อมต่อซ้ำก่อนซื้อแบนด์วิดท์
การเชื่อมต่อใหม่ต้องเสียการแปลงชื่อ การจับมือ TCP การเจรจา TLS และการพิสูจน์ตัวตน และบนเส้นทางที่มีความหน่วงสูง แต่ละอย่างคือการเดินทางไปกลับอีกรอบก่อนคำสั่งแรกจะทำงาน พูลการเชื่อมต่อมีอยู่เพื่อจ่ายค่าใช้จ่ายนั้นครั้งเดียวต่อโปรเซส ไม่ใช่ครั้งเดียวต่อการเรียก
ใน ADO.NET การปิดหรือ dispose การเชื่อมต่อที่อยู่ในพูลจะคืนมันเพื่อใช้ซ้ำแทนการเปิดการเชื่อมต่อทางกายภาพใหม่ ดังนั้นรูปแบบที่ดูเหมือนรั่วไหลมักเป็นการใช้งานที่ถูกต้อง ตรวจสอบว่าพูลถูกใช้จริงแทนการสันนิษฐาน: บันทึกการสร้างการเชื่อมต่อทางกายภาพ หรือเฝ้าดูจำนวนเซสชันบนเซิร์ฟเวอร์ขณะหน้าจอทำงาน แนวทางประสิทธิภาพ SQL กล่าวประเด็นเดียวกันเกี่ยวกับการลดการเดินทางไปกลับและการจัดกลุ่มการเรียกแบบเฉพาะกิจที่เกิดบ่อย พร้อมตัวอย่างเฉพาะบริการที่คุณควรนำไปปรับใช้กับการติดตั้งของคุณเอง
การทำพูลขจัดค่าใช้จ่ายในการตั้งค่าและปล่อยให้การรอคำสั่งแบบต่อเนื่องไม่ถูกแตะต้อง มันเป็นข้อกำหนดเบื้องต้นสำหรับการวัดที่สะอาด ไม่ใช่การแก้ไขในตัวเอง
ชั่งน้ำหนักการย้ายการประมวลผลให้ใกล้ข้อมูลมากขึ้น
การรันแอปใกล้ฐานข้อมูลแทนที่การแลกเปลี่ยนกับฐานข้อมูลระยะไกลจำนวนมากด้วยเซสชันแสดงผลระยะไกลเพียงครั้งเดียว สำหรับภาระงานที่พูดมาก นั่นอาจเป็นการเปลี่ยนแปลงครั้งใหญ่ และเป็นการเปลี่ยนแปลงด้านปฏิบัติการพอๆ กับด้านประสิทธิภาพ: การจัดการเซสชัน การควบคุมการเข้าถึง การติดตั้งซอฟต์แวร์ และประสบการณ์ผู้ใช้ล้วนเคลื่อนไปพร้อมแอป
วัดอินเทอร์เฟซจริงและข้อมูลที่มันถ่ายโอนก่อนสันนิษฐานว่าทิศทางใดเร็วกว่า เซสชันเดสก์ท็อประยะไกลย้ายพิกเซล และหน้าจอที่มีกราฟิกหนาแน่นอาจทำงานได้แย่กว่าบนเส้นทางเดียวกันเมื่อเทียบกับคำสั่งที่มันแทนที่ โดยเฉพาะเมื่อไคลเอนต์วาดใหม่ตลอดเวลา
จากนั้นทำการกระทำเดิมซ้ำและเปรียบเทียบสามตัวเลข: การรอแบบต่อเนื่อง ปริมาณผลลัพธ์ และเวลาที่เสร็จตั้งแต่ต้นจนจบ การปรับปรุงที่เปลี่ยนงานของผู้ใช้ที่วัดได้ขณะรักษาความถูกต้องของข้อมูลและนโยบายการเข้าถึงคือสิ่งที่ควรเก็บไว้