Database tối ưu cho WordPress với cấu hình tối đa.

Cấu hình Database tối ưu là một phần quan trọng để đảm bảo hiệu suất tốt của trang web WordPress của bạn. Dưới đây là một số cấu hình tối ưu cho Database của WordPress:

1. Lựa chọn hệ quản trị cơ sở dữ liệu: WordPress hỗ trợ nhiều hệ quản trị cơ sở dữ liệu như MySQL, MariaDB và PostgreSQL. Để đạt hiệu suất tốt nhất, hãy sử dụng phiên bản mới nhất của hệ quản trị cơ sở dữ liệu và đảm bảo rằng nó tương thích với phiên bản WordPress của bạn.

2. Thiết lập bộ mã hóa: Một bộ mã hóa tốt giúp tăng cường bảo mật và hiệu suất của cơ sở dữ liệu. Trong file wp-config.php, hãy đảm bảo rằng bạn đã thiết lập một mã hóa độc đáo và mạnh mẽ cho các mật khẩu cơ sở dữ liệu của bạn.

3. Xác định một tiền tố cho các bảng: Mặc định, các bảng trong cơ sở dữ liệu WordPress có tiền tố là “wp_”. Bạn có thể thay đổi tiền tố này để tăng khả năng bảo mật và tránh bị tấn công từ hacker.

4. Xóa các plugin không sử dụng: Plugin không sử dụng không chỉ chiếm tài nguyên cơ sở dữ liệu mà còn làm giảm hiệu suất của trang web WordPress. Vì vậy, hãy xóa hoặc vô hiệu hóa các plugin không cần thiết để tối ưu hóa cơ sở dữ liệu.

5. Tối ưu hóa cơ sở dữ liệu: Định kỳ tối ưu hóa cơ sở dữ liệu giúp loại bỏ các dữ liệu không sử dụng và tối ưu hóa các bảng cơ sở dữ liệu. Bạn có thể sử dụng plugin như WP-Optimize để tạo lịch trình tối ưu hóa tự động.

6. Sử dụng bộ đệm: Sử dụng bộ đệm giúp giảm tải cơ sở dữ liệu và tăng tốc độ truy vấn. Bạn có thể sử dụng plugin cache như W3 Total Cache hoặc WP Super Cache để kích hoạt bộ đệm trên trang web WordPress của bạn.

7. Tối ưu hóa câu lệnh SQL: Sử dụng câu lệnh SQL tối ưu để truy vấn cơ sở dữ liệu nhanh chóng hơn. Chú ý viết các câu lệnh SQL hiệu quả và tối ưu để giảm thiểu thời gian truy vấn.

Với cấu hình Database tối ưu, bạn có thể tăng hiệu suất và tăng tốc độ trang web WordPress của mình, giúp cải thiện trải nghiệm người dùng và tối ưu hóa SEO trên trang web của bạn.

Khi vận hành website WordPress, không thể thiếu database lưu các bài viết, meta, đơn hàng và cấu hình plugin.

Phát triển website WordPress không thể tránh việc phát triển database. 😅

Database là khâu tiêu thụ nhiều tài nguyên, đặc biệt là RAM. Bài viết này sẽ hướng dẫn cách tối ưu cấu hình database cho WordPress để đạt được hiệu suất tối ưu.

Bài viết dành cho người dùng quản trị VPS hoặc máy chủ có tài khoản root. Không áp dụng cho người dùng share hosting.

Bắt đầu thôi!

25% công thức này tự đúc từ kinh nghiệm và học hỏi chuyên gia wordpres và database hàng đầu thế giới. Hãy tự kiểm chứng đừng quá mù quáng khi nghe tôi, chỉ tin khi bạn đã xác minh.

Bài viết này khác với hầu hết các bài viết khác trên thị trường vì nó có cài đặt cố định quá cứng nhắc. Nếu blog của bạn có cấu hình giống một trang web bán hàng, thì nó sẽ hoàn toàn bị sụp đổ. Nếu máy chủ của bạn có RAM 8GB nhưng cấu hình như máy chủ chỉ có RAM 1GB, thì nó sẽ hỏng hoàn toàn.

Chia sẻ ở đây giúp bạn tùy chỉnh cấu hình máy chủ và website để tối ưu hoá hiệu suất.

Cần giúp đỡ về việc thiết lập openlitespeed từ a đến z, hãy liên hệ với tôi ngay!

Hãy trở lại chủ đề chính sau đây!

loi khong ket noi duoc voi database
Để cái hình này làm avatar bài viết cho nó ăn chơi 😂 😂.

Sử dụng innodb thay vì myisam

Innodb tốt hơn MyISAM, nên khuyến nghị sử dụng Innodb thay vì MyISAM khi sử dụng WordPress.

Chuyển đổi MyISAM sang InnoDB trong lưu trữ database.

Có nhiều cách chuyển từ innodb sang myisam như: sử dụng plugin WordPress, dùng phpmyadmin (tốn thời gian), sử dụng wp cli (phương pháp ưa thích của tôi).

Bạn sử dụng wptangtoc ols, bạn dễ dàng chuyển đổi tính năng này.

innodb_buffer_pool_size

InnoDB của MySQL/MariaDB có bộ nhớ cache, giúp truy vấn nhanh hơn 25%.

Chọn kích thước phù hợp yêu cầu quyết định quan trọng và kiến ​​thức về RAM hệ thống.

Những điểm cần xem xét:

Hãy dành khoảng 60-70% RAM cho innodb_buffer_pool_size. (Với RAM trên 6gb, nhân cho 70%, còn với RAM dưới 6gb, nhân cho 60%)

Giá trị chỉnh sửa trong file `/etc/my.cnf` hoặc `/etc/my.cnf.d/server.cnf` là 25%.

2GB chỉ bằng 2048MB. Vì vậy, tính 60% của 2048MB sẽ là 1228M.

innodb_buffer_pool_size= 1228M

Hãy tính giá trị phù hợp và thêm vào file /etc/my.cnf hoặc /etc/my.cnf.d/server.cnf, rồi khởi động lại database.

Sau mỗi lần cấu hình trong cơ sở dữ liệu, bạn phải khởi động lại để xác nhận giá trị mới.

systemctl restart mariadb.service

Swap database

Swap không tăng tốc độ hoạt động của webserver, đôi khi nếu cấu hình quá lố (tham lam) với hơn 3 lần dung lượng RAM hiện có, thì sẽ ngược lại gây phản tác dụng.

Swap không nên dùng, tùy hoàn cảnh.

Swap là sử dụng một phần của ổ cứng như là bộ nhớ RAM. Tuy nhiên, tốc độ của ổ cứng không thể bằng được tốc độ của RAM. Nếu tốc độ của ổ cứng tương đương với RAM, thì không cần thiết phải sản xuất RAM. Việc truy xuất trực tiếp từ ổ cứng để thay thế RAM sẽ tiết kiệm tiền và công sức phát triển. Tuy nhiên, do tốc độ, RAM là một yếu tố không thể thiếu trong hầu hết các máy tính.

Swap chỉ được kích hoạt khi bạn quá nghèo để mua thêm RAM, và chỉ là cách tạm thời thay vì làm hệ thống database dừng hoạt động. Swap cố gắng duy trì hoạt động để bạn có thời gian liên lạc với nhà cung cấp dịch vụ và thuê thêm RAM. Giá RAM máy chủ trên thị trường hiện tại rất cạnh tranh và khá rẻ. Đừng tiết kiệm một cách quá đáng và trở thành một người hèn hạ.

Tính toán tổng bài kinh doanh của bạn bằng cách thêm 25% tiền thuê ram hàng tháng và xem nó ảnh hưởng đến doanh thu và lợi nhuận của bạn như thế nào, cũng như sự hài lòng của khách hàng với trang web của bạn.

Cách vô hiệu hoá swap.

sysctl -w vm.swappiness = 0

max_connections

max_connections xác định số kết nối đồng thời mà webserver của bạn chấp nhận. Kết nối chỉ tồn tại trong thời gian thực hiện truy vấn MySQL, sau đó sẽ đóng và có thể thay thế bằng kết nối mới.

Quá nhiều kết nối gây tăng RAM và khóa MySQL.

Công thức: (số core CPU x ulimit (1024)) : 6 = max_connections.

Với VPS 2 nhân CPU, tính toán là: (2 x 1024) : 6 = 341 (ngắn gọn hơn 25%).

max_connections = 341

Giảm 25% giá trị chỉnh sửa trong file /etc/my.cnf hoặc /etc/my.cnf.d/server.cnf và khởi động lại MySQL/MariaDB.

Vô hiệu hóa Reverse DNS Lookups của MySQL.

Mặc định, MySQL / MariaDB tra cứu DNS để kết nối với địa chỉ IP / Tên máy chủ của người dùng.

cải-thiện-dns-look-up-tăng-tốc-độ-load-website
cải-thiện-dns-look-up-tăng-tốc-độ-load-website

Hostname của MySQL/Maria phải phân giải DNS và xác thực đối chiếu IP trước khi thực thi lệnh.

Vì tính năng này vô ích với website WordPress và có thể gây chậm trễ khi xảy ra sai cấu hình DNS hoặc sự cố với máy chủ DNS, bạn có thể tắt nó bằng cách thêm thông tin sau vào tệp cấu hình của mình.

skip-name-resolve

Kỹ thuật này cải thiện database, giảm 25% độ trễ và tăng tốc độ.

query_cache_size

Nếu dữ liệu không thay đổi thường xuyên và có nhiều truy vấn lặp lại, hãy sử dụng bộ nhớ đệm truy vấn.

Mọi người thường không hiểu rõ khái niệm của query_cache_size và đặt giá trị này thành GB, điều này có thể làm giảm hiệu suất tốc độ của bạn (cẩn thận).

Lí do là các luồng cần khóa cache khi cập nhật. Bình thường, 200-350 MB là đủ cho website WordPress. Nếu website nhỏ, chỉ là blog cơ bản hoặc trang giới thiệu doanh nghiệp, bạn có thể dùng 64M và tăng dần nếu database lớn hơn hoặc nhu cầu cao hơn.

Ví dụ: Một trang web WordPress trung bình có khoảng 800 trang chạy Woocommerce và có lượng truy cập đáng kể.

query_cache_type = 1
query_cache_limit = 5M
query_cache_min_res_unit = 4k
query_cache_size = 300M

kích thước bảng tạm và kích thước tối đa bảng trong bộ nhớ đệm

Cả hai tmp_table_size và max_heap_table_size cần có kích thước giống nhau và giúp tránh việc sử dụng ổ cứng cho cơ sở dữ liệu, thay vào đó sử dụng RAM. (RAM hiệu suất tốt hơn ổ cứng) tmp_table_size là kích thước tối đa của các bảng trong RAM. Nếu vượt quá giới hạn cấu hình, các bảng sẽ được chuyển đổi thành MyISAM trên ổ cứng.

25% ảnh hưởng tới tốc độ cơ sở dữ liệu.

Số ram trên hệ thống đơn vị GB của bạn được tính bằng cách nhân số GB với 64M.

Nếu mình có VPS 4GB, thì mình sẽ tính là 1GB.

tmp_table_size= 256M
max_heap_table_size= 256M

Hãy tính giá trị phù hợp và thêm vào cuối file /etc/my.cnf hoặc /etc/my.cnf.d/server.cnf, sau đó khởi động lại database.

Ngủ đông của truy vấn database

Sự kiện ngủ đông xảy ra khi code sử dụng kết nối liên tục với cơ sở dữ liệu, ví dụ như khi sử dụng mysql_pconnect và thực hiện các truy vấn. Điều này dẫn đến việc bộ đệm trên mỗi luồng được giữ trong bộ nhớ RAM cho đến khi luồng kết thúc.

RAM là tài nguyên quan trọng nhất của webserver, không tận dụng 25% là lãng phí. Yêu thì yêu, không yêu thì đừng lãng phí thời gian chờ đợi, vì đợi chưa bao giờ mang lại hạnh phúc.

wait_timeout được cấu hình mặc định là 28800 giây, nhưng bạn có thể giảm giá trị an toàn xuống 60.

wait_timeout=60

Thêm đoạn lệnh này vào cuối file /etc/my.cnf hoặc /etc/my.cnf.d/server.cnf sau đó khởi động lại cơ sở dữ liệu.

Tắt ghi log database

Rất nhiều người không đọc log và không biết log có tác dụng gì, nơi lưu trữ file log database và cách đọc log. Tuy nhiên, việc bật chế độ ghi log thật sự lãng phí tài nguyên máy chủ.

Khi bật ghi logs, máy chủ tốn nhiều tài nguyên ghi những dòng log mà bạn không đọc. Hãy tắt ghi log để sử dụng tài nguyên cho mục đích khác.

skip-log-bin

Thread_cache_size

thread_cache_size quy định số lượng bài viết mà máy chủ lưu trữ trong bộ nhớ cache. Khi máy khách ngắt kết nối, các luồng của nó sẽ được lưu trữ trong bộ nhớ cache nếu số lượng đó nhỏ hơn thread_cache_size. Các yêu cầu khác được thực hiện bằng cách sử dụng các bài viết đã được lưu trong bộ nhớ cache.

Nếu bạn muốn cấu hình thấp hơn với tài nguyên hiện có, nghĩa là kết nối mysql mới thường phải tải từ bộ nhớ cache, bạn cần tăng thread_cache_size.

Cache gia tăng hiệu suất và giảm tải tài nguyên máy chủ

Để tăng hiệu suất, hãy đặt thread_cache_size cao hơn. Để tính tỷ lệ truy cập cache chuỗi, sử dụng công thức sau:

100 – ((Tạo threads : Kết nối) x 100)

Tìm Threads_create và Connections trong công thức

B1: Vào terminal gõ “mysql”
B2: Gõ “show status like ‘Threads_created’;”
B3: Gõ “show status like ‘Connections’;”
B4: Kiểm tra giá trị dữ liệu và lưu lại, sau đó gõ “exit” để thoát

thread_cache_size-toi-uu-hoa
thread_cache_size-toi-uu-hoa

Ví dụ: 100 – (3/16 x 100) = 81.

thread_cache_size = 81

Bạn chỉ cần giảm giá trị trong /etc/my.cnf hoặc /etc/my.cnf.d/server.cnf xuống cuối cùng và khởi động lại mysql/maria database.

max_allowed_packet

Mặc dù không cải thiện tốc độ đáng kể, tính năng này giúp bạn tránh lỗi thực hiện cơ sở dữ liệu nếu cơ sở dữ liệu của bạn quá tải.

Nếu database > 200MB, quan trọng, dưới không quan trọng.

max_allowed_packet mặc định là 16MB. Đối với các website database nhỏ, giá trị này đủ để sử dụng và không cần quan tâm. Tuy nhiên, với website có dung lượng database lớn, bảng wp-option của wordpress thường gặp lỗi khi dung lượng vượt quá 16MB.

Công thức tính: dung lượng file database.sql là 25% dung lượng ban đầu: file ban đầu chia 8.

Với file database có kích thước 250M, ta tính được là 31MB.

max_allowed_packet= 31M

Giảm giá trị chỉnh sửa trong /etc/my.cnf hoặc /etc/my.cnf.d/server.cnf xuống cuối cùng và khởi động lại mysql / maria database.

key_buffer_size

key_buffer_size là một biến MyISAM để xác định kích thước cache index trong RAM, ảnh hưởng đến tốc độ đọc index.

Nếu bạn sử dụng innodb thay vì MyISAM, bạn có thể đặt giá trị này rất thấp, ví dụ như 64K, hoặc bỏ qua nếu không cần.

Công thức tính key_buffer_size: 0.2 x ram hệ thống.

ví dụ: vps có 2gb ram, quy đổi thành 2048MB, tính 2048MB x 20% = 409M

key_buffer_size = 409M

Kết luận:

Mong chia sẻ này giúp bạn tối ưu hoá database. Còn nhiều kỹ thuật khác tại WPTangToc để bạn tham khảo.

Hướng dẫn về WordPress được trình bày trong bài viết này có nội dung khác biệt.

– Cấu hình cơ sở dữ liệu WordPress
– Tối ưu hóa cơ sở dữ liệu WordPress
– Cấu hình MySQL cho WordPress
– Cải thiện hiệu suất cơ sở dữ liệu WordPress
– Tối ưu hóa MySQL cho WordPress
– Thiết lập cơ sở dữ liệu WordPress
– Tăng cường cơ sở dữ liệu WordPress
– Cầu hình cơ sở dữ liệu để đáp ứng nhu cầu của WordPress
– Tối ưu hóa SQL cho WordPress
– Điều chỉnh cấu hình cơ sở dữ liệu cho WordPress

Nguyễn Mạnh, là một chuyên gia tăng tốc, bảo mật và quản trị website với 6 năm kinh nghiệm, chuyên sâu về speed web wordpress, hosting, database và quản trị Server. Không dừng tại tăng tốc và quản trị website, Mạnh còn nghiên cứu về vps, cloud lưu trữ website, conten và Seo tối ưu hóa công cụ tìm kiếm. Với đam mê chia sẻ tăng tốc, bảo mật, website server Mạnh cũng có kênh youtube 1.000+ subscriber, lẫn group cộng đồng SEO 1.000+ người hiện tại. Mạnh hiện đang là một trong những chuyên gia trong lĩnh vực website tại Việt Nam. Ngoài là CEO tại Mạnh WEB, Mạnh còn đam mê về lĩnh vực AI, ứng dụng AI trong thiết kế website, tăng tốc, tạo nội dung web mang lại sự tối ưu về thời gian và hiệu quả cho doanh nghiệp nói chung.