2016-12-14 10 views
9

tôi đã chạy một mysql nhập mysql dummyctrad < dumpfile.sql trên máy chủ và mất quá nhiều thời gian để hoàn thành. Tệp kết xuất là khoảng 5G. Máy chủ centos 6 bộ nhớ = 16G và 8core xử lý, mysql v 5,7 x64Cách giải quyết cảnh báo mysql: "InnoDB: page_cleaner: 1000ms vòng lặp dự định mất XXX ms. Các cài đặt có thể không tối ưu"?

Là những thông điệp bình thường/tình trạng "chờ đợi bảng tuôn ra" và thông điệp InnoDB: page_cleaner: 1000ms intended loop took 4013ms. The settings might not be optimal

nội dung mysql log

2016-12-13T10:51:39.909382Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4013ms. The settings might not be optimal. (flushed=1438 and evicted=0, during the time.) 
2016-12-13T10:53:01.170388Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4055ms. The settings might not be optimal. (flushed=1412 and evicted=0, during the time.) 
2016-12-13T11:07:11.728812Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4008ms. The settings might not be optimal. (flushed=1414 and evicted=0, during the time.) 
2016-12-13T11:39:54.257618Z 3274915 [Note] Aborted connection 3274915 to db: 'dummyctrad' user: 'root' host: 'localhost' (Got an error writing communication packets) 

processlist \

mysql> show processlist \G; 
*************************** 1. row *************************** 
    Id: 3273081 
    User: root 
    Host: localhost 
    db: dummyctrad 
Command: Field List 
    Time: 7580 
    State: Waiting for table flush 
    Info: 
*************************** 2. row *************************** 
    Id: 3274915 
    User: root 
    Host: localhost 
    db: dummyctrad 
Command: Query 
    Time: 2 
    State: update 
    Info: INSERT INTO `radacct` VALUES (351318325,'kxid ge:7186','abcxyz5976c','user100 
*************************** 3. row *************************** 
    Id: 3291591 
    User: root 
    Host: localhost 
    db: NULL 
Command: Query 
    Time: 0 
    State: starting 
    Info: show processlist 
*************************** 4. row *************************** 
    Id: 3291657 
    User: remoteuser 
    Host: portal.example.com:32800 
    db: ctradius 
Command: Sleep 
    Time: 2 
    State: 
    Info: NULL 
4 rows in set (0.00 sec) 

Update-1

mysqlforum, innodb_lru_scan_depth

thay đổi giá trị innodb_lru_scan_depth đến 256 đã được cải thiện các truy vấn chèn thời gian thực hiện + không có thông báo cảnh báo trong nhật ký, mặc định là innodb_lru_scan_depth = 1024;

SET GLOBAL innodb_lru_scan_depth=256;

+1

Vấn đề thực tế là gì? Mất quá nhiều thời gian không phải là điều tôi thấy là một vấn đề cho một quá trình tắt! Bạn có thể cụ thể hơn nhiều không, có lỗi gì nếu bạn thấy? Bạn có bất kỳ nhật ký nào có thể cho biết điều gì đang xảy ra không? Xin lỗi, nhưng không có nơi gần đủ thông tin cho bất kỳ ai để giúp đỡ – jamesc

+0

Câu hỏi * thực tế * là gì? Điều này đọc giống báo cáo trạng thái hơn là một câu hỏi. – spencer7593

Trả lời

27

InnoDB: page_cleaner: loop 1000ms dành mất 4013ms. Các cài đặt có thể không tối ưu. (flushed = 1438 và evicted = 0, trong suốt thời gian.)

Vấn đề là điển hình của một cá thể MySQL nơi bạn có tỷ lệ thay đổi cao đối với cơ sở dữ liệu. Bằng cách chạy nhập 5 GB, bạn đang tạo các trang bẩn nhanh chóng. Khi các trang bẩn được tạo, luồng sạch trang có trách nhiệm sao chép các trang bẩn từ bộ nhớ sang đĩa.

Trong trường hợp của bạn, tôi giả sử bạn không thực hiện nhập 5 GB mọi lúc. Vì vậy, đây là tốc độ tải dữ liệu đặc biệt cao và tạm thời. Bạn có lẽ có thể bỏ qua các cảnh báo, bởi vì InnoDB sẽ dần dần bắt kịp.


Dưới đây là giải thích chi tiết về nội bộ dẫn đến cảnh báo này.

Mỗi giây, trình dọn dẹp trang quét vùng đệm để xóa các trang bẩn từ vùng đệm vào đĩa. Cảnh báo bạn thấy cho thấy rằng nó có rất nhiều trang bẩn để tuôn ra, và phải mất hơn 4 giây để tuôn ra một loạt chúng vào đĩa, khi nó hoàn thành công việc đó dưới 1 giây. Nói cách khác, nó cắn ra nhiều hơn là nó có thể nhai.

Bạn đã điều chỉnh điều này bằng cách giảm innodb_lru_scan_depth từ 1024 xuống 256. Điều này giảm khoảng cách vào vùng đệm mà chuỗi trang sạch tìm kiếm các trang bẩn trong chu kỳ một lần mỗi giây. Bạn đang yêu cầu nó cắn nhỏ hơn.

Lưu ý rằng nếu bạn có nhiều phiên bản vùng đệm, nó sẽ làm cho việc làm nhiều việc hơn. Nó cắn ra innodb_lru_scan_depth số lượng công việc cho mỗi trường hợp vùng đệm. Vì vậy, bạn có thể vô tình gây ra nút cổ chai này bằng cách tăng số lượng vùng đệm mà không làm giảm độ sâu quét.

Tài liệu cho innodb_lru_scan_depth cho biết "Cài đặt nhỏ hơn mặc định thường phù hợp với hầu hết khối lượng công việc". Có vẻ như họ đã cung cấp tùy chọn này một giá trị quá cao theo mặc định.

Bạn có thể đặt giới hạn trên IOPS được sử dụng bằng cách xả nền, với các tùy chọn innodb_io_capacityinnodb_io_capacity_max. Tùy chọn đầu tiên là một giới hạn mềm về thông lượng I/O mà InnoDB sẽ yêu cầu. Nhưng giới hạn này là linh hoạt; nếu xả nước đang rơi đằng sau tốc độ tạo trang bẩn mới, InnoDB sẽ tự động tăng tỷ lệ xả nước vượt quá giới hạn này. Tùy chọn thứ hai định nghĩa một giới hạn chặt chẽ hơn về cách InnoDB có thể tăng tốc độ xả.

Nếu tốc độ xả có thể theo kịp với tỷ lệ trung bình tạo trang bẩn mới, thì bạn sẽ không sao. Nhưng nếu bạn liên tục tạo các trang bẩn nhanh hơn chúng có thể bị xóa, cuối cùng vùng đệm của bạn sẽ lấp đầy các trang bẩn, cho đến khi các trang bẩn vượt quá innodb_max_dirty_page_pct của vùng đệm. Tại thời điểm này, tốc độ xả sẽ tự động tăng và có thể khiến page_cleaner gửi cảnh báo.

Một giải pháp khác là đặt MySQL trên máy chủ có đĩa nhanh hơn. Bạn cần một hệ thống I/O có thể xử lý thông lượng theo yêu cầu của trang của bạn đỏ bừng.

Nếu bạn thấy cảnh báo này tất cả thời gian dưới lưu lượng truy cập trung bình, bạn có thể đang cố gắng thực hiện quá nhiều truy vấn viết trên máy chủ MySQL này. Nó có thể là thời gian để mở rộng quy mô, và chia viết trên nhiều trường hợp MySQL, mỗi với hệ thống đĩa riêng của họ.

Đọc thêm về trình dọn dẹp trang: https://blogs.oracle.com/mysqlinnodb/entry/introducing_page_cleaner_thread_in

+0

thiết lập innodb_lru_scan_depth đến 256 không giải quyết được vấn đề –

+0

@KarimSamir, không có gì đặc biệt về giá trị 256. Đó là một ví dụ mà OP được sử dụng. –

+0

vâng, tôi biết, bạn có thể đề xuất bất cứ điều gì khác tôi có thể làm để giải quyết vấn đề này không? –

Các vấn đề liên quan