- WordPress + MySQL: Cặp bài trùng và điểm nghẽn ẩn
- InitTop v1.1.0 có gì mới?
- Scenario thực tế: WordPress đột ngột chậm
- Bước 1: Quan sát tổng quan
- Bước 2: Phát hiện thủ phạm bằng màu sắc
- Bước 3: EXPLAIN ngay trên terminal
- Bước 4: Giải cứu tạm thời bằng Kill Query
- Bước 5: Export bằng chứng để phân tích sau
- Giám sát định kỳ với JSON Mode
- Chạy snapshot định kỳ qua cron
- Script alert đơn giản
- Full-stack observability: InitTop là mảnh ghép nào?
- Mô hình 3 tầng giám sát cho WordPress
- Buffer Pool và Connections: Đọc đúng để hành động đúng
- Buffer Pool Hit Rate
- Buffer Pool Used %
- Connections
- Mouse Support: Terminal cũng có thể “click”
- InitTop so với các công cụ khác: Góc nhìn WordPress
- Workflow khuyến nghị cho admin WordPress
- Kết luận
- Lệnh cài đặt nhanh
- Tham khảo nhanh phím tắt v1.1.0
Ở bài giới thiệu trước, chỉ nói về cách cài đặt và các tính năng cơ bản. Trong bài này, sẽ đi sâu vào v1.1.0 — phiên bản mang InitTop từ một “công cụ nhìn” lên thành một profiler và action center thực sự cho WordPress. Nội dung bao gồm Query History, Export Slow Log, JSON mode, và cách biến InitTop thành một mảnh ghép trong hệ thống giám sát full-stack.
WordPress + MySQL: Cặp bài trùng và điểm nghẽn ẩn
WordPress là CMS chiếm hơn 40% web toàn cầu, và hầu hết đều chạy trên MySQL hoặc MariaDB. Vấn đề là: khi plugin bị lỗi, transient cache bị bloat, hoặc một cron job nào đó chạy query không tối ưu, sẽ không bao giờ biết chính xác điều gì đang xảy ra chỉ bằng htop hay mysql -e "SHOW PROCESSLIST".
InitTop v1.1.0 giải quyết bài toán này bằng cách cung cấp:
- Processlist real-time với phân loại màu theo mức độ nguy hiểm.
- Query History — phát hiện query lặp lại ngay trong session.
- EXPLAIN inline — tối ưu query ngay trên terminal.
- Kill query — giải cứu site đang đơ mà không cần restart MySQL.
- Export slow log — ghi nhận bằng chứng để phân tích sau.
- JSON mode — tích hợp với cron, log parser, hoặc monitoring stack.
InitTop v1.1.0 có gì mới?
Trước khi đi vào use case WordPress, đây là danh sách tính năng mới trong v1.1.0:
| Phím / Flag | Tính năng | Ý nghĩa với WordPress |
|---|---|---|
| W | Export slow queries ra file log | Lưu lại query chậm để phân tích sau, hoặc gửi cho developer plugin |
| H | Query History overlay | Phát hiện query lặp lại — thường là dấu hiệu plugin bị lỗi vòng lặp |
| C | Clear query history | Reset session khi bắt đầu debug một tình huống mới |
| Mouse click | Select row trực tiếp | Không cần nhớ PID, click đúng query muốn kill |
| Mouse dblclick | Auto EXPLAIN | Nhanh chóng xem execution plan của query đang chọn |
--json |
Non-interactive JSON output | Tích hợp với cron, script, hoặc log aggregator |
--no-color |
Monochrome mode | Chạy trên terminal cơ bản hoặc khi pipe output |
| Sparkline QPS | Biểu đồ QPS 30 giây gần nhất | Nhìn ra pattern traffic spike hoặc DDoS nhỏ |
Scenario thực tế: WordPress đột ngột chậm
Hãy tưởng tượng website đột nhiên đơ, không vào được admin. SSH vào VPS, chạy InitTop.
Bước 1: Quan sát tổng quan
Ngay dòng đầu tiên, sẽ thấy:
MySQL 8.0.36 | Uptime 12:34:56 | MaxConn 151 | SlowAt >=1.0s | QPS 245.3 ▁▂▃▄▅▆▇█
QPS đột ngột từ 15 lên 245? Sparkline hiển thị một cột “█” cuối cùng — đây là dấu hiệu traffic spike hoặc một process nào đó đang bombard database.
Bước 2: Phát hiện thủ phạm bằng màu sắc
Trong danh sách processlist, sẽ thấy một dòng RED bold:
PID USER DB CMD TIME STATE QUERY
48291 wp_user wp_database Query 8.2 Sending data SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_type = 'product' AND ...
TIME = 8.2 giây, màu đỏ. Đây là query đang làm nghẽn hệ thống. Nhưng đó chỉ là một query. Nhấn H — Query History — sẽ thấy:
COUNT SLOW QUERY
147 12 SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_type = 'product' AND ...
Query này đã xuất hiện 147 lần trong session, 12 lần bị đánh dấu slow. Đây không phải lỗi một lần — đây là một plugin WooCommerce hoặc một đoạn code trong theme đang chạy trong vòng lặp. Query lặp lại liên tục là dấu hiệu điển hình của N+1 query problem trong WordPress.
Bước 3: EXPLAIN ngay trên terminal
Di chuyển xuống query đó, nhấn e. InitTop hiển thị overlay:
EXPLAIN output - any key to close
select_type=SIMPLE type=ALL possible_keys=NULL key=NULL key_len=NULL ref=NULL rows=45231 Extra=Using where
type=ALL và key=NULL — đây là full table scan trên bảng wp_posts với 45,231 rows. Plugin đang query mà không dùng index. Cần thêm composite index trên (post_type, post_status), hoặc tối ưu lại logic query.
Bước 4: Giải cứu tạm thời bằng Kill Query
Trong lúc chờ fix code, không muốn site tiếp tục đơ. Chọn query, nhấn K (chữ hoa). InitTop gửi lệnh KILL QUERY 48291. Query bị dừng ngay lập tức, CPU giảm, site thở được.
Bước 5: Export bằng chứng để phân tích sau
Nhấn W để export toàn bộ slow queries hiện tại ra file:
# InitTop export — 2026-07-01 14:32:15 QPS=245.3
# Slow threshold: 3s
# Processes: 47 Slow: 12
# PID=48291 USER=wp_user DB=wp_database TIME=8.2s STATE=Sending data
SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_type = 'product' AND ...
File này được append vào inittop_slow.log (hoặc path chỉ định qua --log-file). Có thể dùng nó để:
- Gửi cho developer/theme support.
- Phân tích bằng
pt-query-digestnếu cần. - Lưu vào ticket để theo dõi regression sau khi fix.
Giám sát định kỳ với JSON Mode
Tính năng interactive TUI của InitTop rất mạnh khi đang online. Nhưng để biến InitTop thành một phần của hệ thống giám sát, cần JSON mode.
Chạy snapshot định kỳ qua cron
# Mỗi 5 phút, ghi snapshot JSON vào log
*/5 * * * * MYSQL_PWD=your_password /usr/local/bin/inittop -u root -S /run/mysqld/mysqld.sock --json --json-count=1 --interval=2 >> /var/log/inittop.jsonl 2>/dev/null
Output mỗi dòng là một object JSON hoàn chỉnh:
{
"ts": "2026-07-01T14:35:22",
"version": "8.0.36",
"uptime_sec": 45231,
"qps": 245.3,
"connections": {
"connected": 47,
"running": 12,
"slow": 3,
"locked": 0
},
"buffer_pool": {
"size_mb": 1024,
"hit_pct": 98.5,
"used_pct": 82.3
},
"processes": [...]
}
Với dữ liệu này, có thể:
- Parse bằng Python/Node để gửi alert qua Telegram/Slack khi
slow > 5hoặchit_pct < 90. - Đẩy vào Loki hoặc Elasticsearch nếu đã có log stack.
- Vẽ biểu đồ đơn giản bằng script Python với matplotlib — không cần Prometheus phức tạp.
Script alert đơn giản
#!/bin/bash
# /usr/local/bin/inittop-alert.sh
export MYSQL_PWD="your_password"
/usr/local/bin/inittop -u root -S /run/mysqld/mysqld.sock --json --json-count=1 | python3 -c "
import sys, json
data = json.loads(sys.stdin.readline())
slow = data['connections']['slow']
locked = data['connections']['locked']
hit = data['buffer_pool']['hit_pct']
if slow > 3 or locked > 0 or hit < 90:
print(f'[ALERT] InitTop: slow={slow}, locked={locked}, buffer_hit={hit}%')
"
Chạy script này qua cron mỗi phút — vừa có một hệ thống alerting tự động mà không cần cài thêm bất kỳ agent nào khác.
Full-stack observability: InitTop là mảnh ghép nào?
“Full-stack observability” nghe sang chảnh, nhưng với WordPress self-hosted, nó chỉ đơn giản là có thể nhìn thấy toàn bộ chuỗi từ request đến phản hồi. InitTop chiếm vị trí ở tầng database.
Mô hình 3 tầng giám sát cho WordPress
| Tầng | Công cụ | InitTop đóng vai trò gì? |
|---|---|---|
| Web Server | Nginx/Apache access log, goaccess |
Biết request nào đến, nhưng không biết query nào chậm |
| Application | PHP-FPM status, Query Monitor (WP plugin) | Query Monitor rất tốt, nhưng cần WP admin load được. Khi site đơ, không vào được admin. |
| Database | InitTop | Chạy độc lập, không phụ thuộc WordPress, giám sát real-time ngay cả khi site đã chết. |
Khi kết hợp cả ba, có thể trace một vấn đề như sau:
- Goaccess cho thấy spike 500 errors từ IP X.
- PHP-FPM log cho thấy request timeout sau 30 giây.
- InitTop cho thấy query từ user
wp_userđangSending data28 giây trên bảngwp_postmeta— full table scan. - EXPLAIN xác nhận thiếu index trên
meta_key. - Kill query để site sống lại, export log để fix sau.
Đó là full-stack observability thực sự — không cần Datadog, không cần New Relic, chỉ cần terminal và log.
Buffer Pool và Connections: Đọc đúng để hành động đúng
Ngoài processlist, InitTop v1.1.0 hiển thị hai chỉ số quan trọng mà mọi admin WordPress nên hiểu:
Buffer Pool Hit Rate
Tỷ lệ này cho biết MySQL đọc dữ liệu từ RAM (buffer pool) thay vì đọc từ disk. Với WordPress:
- ≥ 99%: Tuyệt vời. Buffer pool đủ lớn cho toàn bộ dataset.
- 95–98%: Tạm ổn. Có thể cần tăng
innodb_buffer_pool_sizenếu site lớn. - < 95%: Cảnh báo. Disk I/O đang là bottleneck. WooCommerce với hàng nghìn sản phẩm sẽ rất chậm.
InitTop hiển thị hit rate bằng thanh tiến trình màu: xanh → vàng → đỏ. Không cần nhớ số, nhìn màu là biết.
Buffer Pool Used %
Nếu thanh này đầy (>90%), MySQL sẽ bắt đầu đuổi dữ liệu cũ ra khỏi RAM. Với WordPress có nhiều plugin, bảng wp_options và wp_postmeta thường rất lớn — dễ làm đầy buffer pool.
Connections
- Connected: Số kết nối hiện tại. Nếu gần
max_connections(thường 151), WordPress sẽ báo lỗi “Error establishing a database connection”. - Running: Số query đang thực thi. Nếu Running cao nhưng QPS thấp, có nghĩa là các query đang bị treo.
- Slow: Số query vượt ngưỡng. Chỉ số này nhấp nháy đỏ là lúc cần hành động ngay.
- Locked: Số query đang bị khóa bảng. MyISAM hoặc các operation
ALTER TABLEkhông tối ưu sẽ gây ra lock cascade.
Mouse Support: Terminal cũng có thể “click”
Một điểm nhỏ nhưng rất thực dụng trong v1.1.0: InitTop hỗ trợ chuột trên các terminal như iTerm2, GNOME Terminal, và cả Windows Terminal qua SSH.
- Click vào một dòng để select query đó — không cần dùng phím mũi tên.
- Double-click để auto EXPLAIN query đang chọn.
Điều này đặc biệt hữu ích khi đang screen-share với khách hàng hoặc đồng nghiệp. Họ thấy click đúng query, double-click xem EXPLAIN — rất trực quan.
InitTop so với các công cụ khác: Góc nhìn WordPress
| Công cụ | Điểm mạnh | Điểm yếu với WordPress |
|---|---|---|
| Query Monitor (WP Plugin) | Chi tiết, hiển thị hook, query, HTTP API | Chỉ chạy khi WP load được. Khi site đơ vì MySQL nghẽn, plugin này không giúp được. |
| mytop / innotop | Quen thuộc với DBA | Perl-based, cài đặt phức tạp, giao diện lỗi thời, không có query history hay export. |
| Percona Toolkit | Rất mạnh cho DBA chuyên nghiệp | Quá nặng, quá nhiều tool, learning curve cao. Không phù hợp cho admin WordPress cần giải quyết nhanh. |
| InitTop v1.1.0 | Zero dependency, Python 3, TUI hiện đại, có action (kill, explain, export, history) | Chỉ giám sát MySQL/MariaDB, không can thiệp PHP hay Nginx. |
InitTop không thay thế Query Monitor — nó bổ sung cho Query Monitor. Khi WordPress còn sống, Query Monitor giúp debug theme/plugin. Khi WordPress đã chết vì database, InitTop là công cụ duy nhất cần mở.
Workflow khuyến nghị cho admin WordPress
Đây là quy trình áp dụng cho các site Init Manga và WordPress khách hàng:
- Cài đặt InitTop ngay khi triển khai server (đã tích hợp trong InitOps).
- Để TUI chạy trong tmux/screen khi đang bảo trì hoặc deploy update lớn.
- Setup cron với
--jsonđể ghi snapshot mỗi 5 phút. - Viết script parser đơn giản để alert khi slow query > 3 hoặc buffer hit < 95%.
- Khi incident xảy ra:
- Mở InitTop → quan sát màu sắc.
- Nhấn H để xem query lặp lại.
- e để EXPLAIN query nghi ngờ.
- K để kill nếu cần giải cứu ngay.
- W để export log trước khi thoát.
- Sau incident: dùng slow log để thêm index, tối ưu plugin, hoặc liên hệ developer.
Kết luận
InitTop v1.1.0 không chỉ là một công cụ “nhìn” MySQL nữa. Với Query History, Export Slow Log, EXPLAIN inline, Kill query, và JSON mode, nó đã trở thành một profiler và action center thực sự cho WordPress.
Điều quan trọng nhất: nó vẫn giữ nguyên triết lý của Init HTML — self-contained, minimal dependency, chạy trên mọi terminal. Không cần cài đặt một stack monitoring phức tạp chỉ để biết tại sao website WordPress đang đơ.
Nếu đã dùng InitOps để deploy server, InitTop đã sẵn sàng. Nếu chưa, một dòng lệnh là đủ.
Lệnh cài đặt nhanh
curl -sSL https://inithtml.com/inittop/install.sh | bash
Tham khảo nhanh phím tắt v1.1.0
- ↑ / ↓ — Di chuyển giữa các process.
- K — Kill query đang chọn.
- e — EXPLAIN query đang chọn (chỉ SELECT).
- / — Lọc processlist.
- ESC — Xóa bộ lọc hoặc đóng overlay.
- s — Chuyển đổi cột sắp xếp.
- p — Tạm dừng / tiếp tục auto-refresh.
- r — Refresh ngay lập tức.
- W — Export slow queries ra file log.
- H — Xem Query History overlay.
- C — Xóa Query History.
- ? — Mở màn hình trợ giúp.
- q — Thoát InitTop.
Bình luận