ทำความเข้าใจกับสถิติพูลบัฟเฟอร์ INNODB


20

หลังจากอ่านหน้านี้ในเอกสาร mysqlฉันพยายามเข้าใจการใช้งาน InnoDB ปัจจุบันของเรา ขณะนี้เราจัดสรร RAM ขนาด 6GB สำหรับบัฟเฟอร์พูล ขนาดฐานข้อมูลของเราใกล้เคียงกัน นี่คือผลลัพธ์จากshow engine innodb status\G(เรากำลังเรียกใช้ v5.5)

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 6593445888; in additional pool allocated 0
Dictionary memory allocated 1758417
Buffer pool size   393215
Free buffers       853
Database pages     360515
Old database pages 133060
Modified db pages  300
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 7365790, not young 23099457
0.00 youngs/s, 0.00 non-youngs/s
Pages read 1094342, created 185628, written 543182148
0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 360515, unzip_LRU len: 0
I/O sum[2571]:cur[0], unzip sum[0]:cur[0]

ฉันต้องการทราบว่าเราใช้บัฟเฟอร์แคชได้ดีเพียงใด หลังจากเริ่มมองผลลัพธ์ออกมาดูเหมือนว่าเราใช้มันจริง ๆPages made youngและnot youngมีตัวเลขอยู่ในนั้นและBuffer pool hit rate is 1000 / 10000(ซึ่งฉันเห็นที่อื่นในเว็บนั่นหมายความว่ามันใช้งานค่อนข้างหนักจริงไหม?)

สิ่งที่ฉันผ่านการขว้างปาห่วงคือเหตุผลที่young-making rateและnotมีทั้งที่ 0/1000 และyoung/sและnon-young/sการเข้าถึงมีทั้งที่ 0 ผู้ที่ทุกคนจะแสดงให้เห็นว่ามันไม่ได้ถูกนำมาใช้เลยใช่มั้ย?

มีใครช่วยเรื่องนี้บ้างไหม?

คำตอบ:


18
 Buffer pool hit rate is 1000 / 1000

นี่เป็นเพียงคุณค่าที่มีความหมายจริงๆในสถานการณ์ที่คุณอยู่ ... และสถานการณ์นั้นคือคุณโชคดีพอที่มีบัฟเฟอร์พูลด้วยอัตราการเข้าชม 100% ที่สมบูรณ์แบบ อย่าวิเคราะห์ส่วนที่เหลือมากเกินไปเพราะคุณไม่จำเป็นต้องเปลี่ยนอะไรนอกจากว่าระบบปฏิบัติการเซิร์ฟเวอร์จะมีหน่วยความจำน้อยทำให้เกิดการสลับสับเปลี่ยน

ค่าเล็ก / อ่อนยังไม่น่าสนใจในกรณีที่ไม่มีแรงกดดันต่อพูลบัฟเฟอร์ InnoDB ใช้งานอยู่มันไม่ทำอะไรเลยหากไม่มีมัน หากกลุ่มมีขนาดเล็กเกินไปหน้าจะถูกนำออกและหน้าใหม่จะถูกอ่านและสถิติอื่น ๆ จะช่วยให้คุณเข้าใจว่า ... แต่นั่นเป็นปัญหาที่คุณไม่มี

ฟรีพื้นที่ "ไม่ได้ใช้" ในสระว่ายน้ำจะไม่ถูกละเลยหรือไม่ได้ใช้งานโดย InnoDB หากจำเป็นไม่ว่าด้วยเหตุผลใดก็ตามดังนั้นความจริงที่ว่าฟรีหมายความว่าคุณมีห้องหายใจที่จะขยายเป็นขนาดของการทำงานของคุณ ชุดข้อมูลเติบโตขึ้น

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


28

The Buffer pool size 393215 นี่เป็นหน้าที่ไม่ได้เป็นไบต์

หากต้องการดูขนาดบัฟเฟอร์ของบัฟเฟอร์เป็น GB ให้ดำเนินการดังนี้

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Database pages 360515 นี่คือจำนวนหน้าที่มีข้อมูลอยู่ในบัฟเฟอร์พูล

ในการดูปริมาณข้อมูลในขนาดบัฟเฟอร์พูลหน่วย GB ให้ดำเนินการดังนี้

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

หากต้องการดูเปอร์เซ็นต์ของการใช้บัฟเฟอร์พูลให้ดำเนินการดังนี้

SELECT CONCAT(FORMAT(DataPages*100.0/TotalPages,2),' %') BufferPoolDataPercentage FROM
(SELECT variable_value DataPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

Modified db pages 300นี่คือจำนวนหน้าใน Buffer Pool ที่จะต้องเขียนกลับไปยังฐานข้อมูล พวกเขาจะเรียกว่าหน้าสกปรก

หากต้องการดู Space Taked Up โดย Dirty Pages ให้รันสิ่งนี้:

SELECT FORMAT(DirtyPages*PageSize/POWER(1024,3),2) BufferPoolDirtyGB FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

หากต้องการดูเปอร์เซ็นต์ของหน้าสกปรกให้ดำเนินการดังนี้:

SELECT CONCAT(FORMAT(DirtyPages*100.0/TotalPages,2),' %') BufferPoolDirtyPercentage FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

สำหรับสิ่งอื่น ๆ บนหน้าจอให้เรียกใช้สิ่งนี้:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';

คุณจะเห็นตัวแปรสถานะทั้งหมดสำหรับบัฟเฟอร์พูล คุณสามารถใช้แบบสอบถามเดียวกันกับสิ่งที่คุณต้องการตรวจสอบ


ขอขอบคุณ! ดังนั้นจากนี้ฉันรวบรวมว่าแคชบัฟเฟอร์ของเราถูกใช้จริง แต่สิ่งที่ฉันต้องการทราบคือถ้าเราใช้มันอย่างมีประสิทธิภาพ ถ้าฉันเข้าใจแนวคิดของหน้าเด็กและหน้าเก่าฉันเดาว่าจะเป็นตัวบ่งชี้ที่ดีว่าบัฟเฟอร์แคชกำลังถูกใช้อย่างเต็มที่จะเป็นจำนวนหน้าที่ทำให้เด็กและเข้าถึงหน้าเว็บที่ถูกต้องหรือไม่ เราใช้ mysqldump เพื่อสำรองข้อมูลทุก ๆ 3 ชั่วโมงซึ่งจะอธิบายว่าทำไมมันถึงเต็ม แต่ด้วยyoung-making rate 0 / 1000และ0.00 youngs/sนั่นบอกเราว่าเราไม่ได้ใช้มันอย่างแท้จริง ฉันอ่านถูกไหม
Safado

2
อัตราการสร้างหนุ่มเป็น 0/1000 จะบอกคุณว่าหน้าข้อมูลสำหรับการสืบค้นที่คุณกำลังเรียกใช้ไม่เพียง แต่พอดีกับแคชเท่านั้น แต่ยังพอดีกับแคชขนาดเล็ก (3/8) นั่นคือการสืบค้นไม่ได้ใช้ข้อมูลมากพอที่จะทำให้บางหน้าของหน้าเว็บลงในแคชที่ไม่ใหญ่มาก
Thomas Jones-Low

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

5

ฉันจะไม่เห็นด้วยกับการประเมินว่า "คุณโชคดีพอที่มีบัฟเฟอร์พูลด้วยอัตราการเข้าชมที่สมบูรณ์แบบ 100%"

ที่ด้านบนของเอาต์พุต (ซึ่งตัดออก) จะมีบรรทัดคล้าย:

Per second averages calculated from the last 16 seconds

สิ่งนี้บอกฉันว่า ไม่มีการอ่านเกิดขึ้นในช่วง 16 วินาทีที่ผ่านมา (ดุ้งดิ้ง) ทำให้คุณได้คะแนน '1000/1000' ที่สมบูรณ์แบบ

0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000

ในขณะเดียวกันก็มีบางคนเขียน สิ่งเหล่านี้อาจถูกเขียนแบบเลื่อนออกไปสำหรับการล้างหน้า 'สกปรก' หรือล้างดัชนีจาก 'บัฟเฟอร์การเปลี่ยนแปลง'

อาจไม่มีกิจกรรมในพื้นที่เล็ก / ร้อนใน 16 วินาทีที่ผ่านมาเช่นกัน


เราเฉลี่ยระหว่าง 6k-10k เลือกหนึ่งวินาทีและในเวลาเดียวกันฉันสามารถดูกิจกรรมการอ่านดิสก์เกือบ 0 รายการบนเซิร์ฟเวอร์ดังนั้นฉันไม่คิดว่าเป็นกรณีนี้
Safado

"แคชข้อความค้นหา" เป็นไปตามคำค้นหาส่วนใหญ่หรือไม่ SHOW VARIABLES LIKE 'query%';และและSHOW GLOBAL STATUS LIKE 'Qc%'; SHOW GLOBAL VARIABLES LIKE 'Com_SELECT';
Rick James

0

บัฟเฟอร์พูลแบ่งออกเป็นสองส่วนคือรายการย่อยและรายการที่ไม่เก่า อัตราการสร้างแสดงจำนวนหน้าในพูลบัฟเฟอร์ที่มีการสับระหว่างสองรายการ

หน้าเว็บที่ยังเด็กอยู่นั้นไม่ใช่หน้าเด็กที่กำลังทำอยู่ (เช่นการอ่านจากแคชหน้าที่ไม่ได้เล็กก็คือหน้าที่ถูกย้ายจากรายการที่ยังเด็กเพราะทั้งหน้านั้นแก่เกินไป

อัตราที่หน้าถูกย้ายระหว่างสองขึ้นอยู่กับจำนวนของพูลบัฟเฟอร์ที่ใช้ในปัจจุบันเทียบกับขนาดของพูลย่อย ตั้งค่าเป็นศูนย์หมายความว่าชุดที่ใช้งานของคุณ (หน้าเว็บที่คุณใช้) มีขนาดเล็กกว่ากลุ่มเล็ก

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