Học Wordpress

Tìm hiểu cấu trúc database WordPress và cách tối ưu

160

Mặc dù bạn là một người sử dụng WordPress thông thường hay một lập trình viên WordPress thì việc hiểu cấu trúc database và các thao tác cơ bản sẽ giúp bạn ít nhiều trong quãng thời gian sử dụng, chẳng hạn như bạn có thể hiểu các dữ liệu được lưu ở đâu, thay đổi theme thì nó sẽ lưu các tùy chọn ở đâu để có thể linh hoạt hơn trong việc kiểm soát kho dữ liệu đồ sộ này.

Hoặc hơn thế nữa, vào một ngày đẹp trời có một theme bị lỗi khiến bạn không vào được Dashboard để đổi sang theme khác thì việc duy nhất bạn có thể làm là vào tận database để sửa.

Cấu hình database tại file wp-config.php

Trước khi vọc vạch vào trong database thì chúng ta cần biết mã nguồn WordPress kết nối với database ở đâu và có các tham số cấu hình liên quan. Và chắc tất cả đều biết là cấu hình database sẽ nằm trong file wp-config.php trên website, file đó có nhiều nội dung nhưng đây là 4 dòng cấu hình database:


// ** MySQL settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
define(‘DB_NAME’, ‘tên của database’);

/** MySQL database username */
define(‘DB_USER’, ‘tài khoản quản trị database’);

/** MySQL database password */
define(‘DB_PASSWORD’, ‘mật khẩu quản trị database’);

/** MySQL hostname */
define(‘DB_HOST’, ‘localhost’);

/** Database Charset to use in creating database tables. */
define(‘DB_CHARSET’, ‘utf8’);

/** The Database Collate type. Don’t change this if in doubt. */
define(‘DB_COLLATE’, ”);

Ở trong cách cài đặt WordPress mình không nói đến bước sửa file wp-config.php bởi vì chỉ cần chạy website và nó sẽ tự kêu bạn nhập các thông tin database, tránh khả năng bạn mở lên và sửa không đúng cách dẫn tới việc bị lỗi.

Nhưng khi bạn chuyển website sang host khác hoặc làm gì đó liên quan đến việc thay đổi database thì chắc chắn bạn cần phải hiểu 6 dòng trên. Và liên quan đến bảo mật, bạn cần hiểu thêm dòng này:

/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each a unique
* prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = ‘wp_’;

Mặc định WordPress sẽ cấu hình các tiền tố của database là wp_ nhưng bạn nên đổi nó thành một  cái tên khác để hạn chế local attack, plugin iThemes Security có hỗ trợ chức năng này. Hoặc là bạn nên nhập một tiền tố khác khi cài đặt một website WordPress mới và tiền tố phải có dấu _ ở cuối để phân cách tên table của database.

Cấu trúc của database mặc định

Để xem cấu trúc các bảng và cột dữ liệu bạn cần truy cập vào PhpMyAdmin thường có mặt ở tất cả mọi gói host mà bạn mua. Bạn có thể thấy mặc định WordPress có tổng cộng 11 bảng dữ liệu (table).

wp-database-table

Ý nghĩa của các table như sau:

wp_commentmeta: Mục này sẽ chứa các dữ liệu vĩ mô của các bình luận có trên website nếu bạn có sử dụng custom comment meta. Chẳng hạn như bạn sử dụng plugin CommentLuv thì table này sẽ chứa các địa chỉ website từ RSS Feed của người bình luận. Nếu bạn dùng Akismet thì cột này sẽ phình to ra sau một thời gian dài.

  • wp_comments: Cột này sẽ chứa dữ liệu cần thiết về các bình luận như tên người bình luận, nội dung, ngày tháng, địa chỉ website,….
  • wp_links: Kể từ phiên bản WordPress 3.7 thì họ đã tắt đi chức năng Blogroll thường được dùng để thêm các liên kết mình yêu thích. Và các dữ liệu từ blogroll đó sẽ lưu ở đây, nhưng bây giờ thì hầu như không dùng tới.
  • wp_options: Table này khá quan trọng vì nó lưu trữ hầu hết các dữ liệu liên quan đến thiết lập của bạn trong website. Chẳng hạn như tên website, địa chỉ website, plugin đang dùng, theme đang dùng, dữ liệu khi kích hoạt theme và plugin,…Do đó nếu bạn muốn sửa plugin và theme đang dùng thì cứ vào table này.
  • wp_postmetas: Các dữ liệu trong bảng này là những dữ liệu vĩ mô có liên quan đến thiết lập của các post type mà bạn đang dùng. Chẳng hạn như các giá trị custom field,…
  • wp_posts: Những nội dung chính của một post type như tiêu đề, tác giả, nội dung,…sẽ chứa trong bảng này. Áp dụng cho toàn bộ post type, kể cả custom post type.
  • wp_term: Như bạn biết mặc định taxonomy là Category và Tag. Ví dụ ở category, bạn tạo ra 5 mục khác nhau thì 5 mục đó chính là term. Term sẽ được lưu trữ toàn bộ tại table này.
  • wp_term_relationships: Table này là chứa dữ liệu để một term có thể kết nối với một taxonomy qua ID. Chẳng hạn như bạn vừa tạo ra một term tên “Giáo dục” nhưng nó sẽ không thể hiểu “Giáo dục” là tag hay category nếu thiếu table này.
  • wp_term_taxonomy: Là nơi chứa đựng các danh sách taxonomy mà bạn đang có, bao gồm cả custom taxonomy.
  • wp_usermeta: Mỗi thông tin thành viên sẽ có thêm các tùy chọn thông tin thêm như họ tên, nickname và các user custom field. Các dữ liệu vĩ mô đó sẽ lưu ở đây.
  • wp_users: Là nơi chứa đựng các thông tin quan trọng của một thành viên như username, mật khẩu, email,…

Nhưng có thể bạn vào sẽ thấy nhiều table hơn vì có khá nhiều plugin sẽ tự tạo cho nó một table riêng để chứa các dữ liệu liên quan tới nó.

wordpress-database-relationship

Mô hình kết nối giữa các table với nhau

Mỗi một table sẽ có rất nhiều cột (column) và hàng (row) khác nhau, và mỗi cột và hàng nó đều có các key (khóa) và value (giá trị). Nó giống thế này:

wp-database-table-browse

Nếu bạn cần sửa giá trị thì chỉ cần ấn vào nút Edit rồi tiến hành sửa là xong.

Tối ưu database

Database tương tự như ổ cứng, do nó phải thường xuyên đọc – ghi – xóa dữ liệu liên tục nên sau một thời gian dài nó sẽ phát sinh ra các phân mảnh database làm cho dữ liệu bạn nặng nề hơn, truy xuất chậm hơn thông thường.

Vì vậy để chăm sóc “sức khỏe” cho database, bạn nên tiến hành sử dụng công cụ optimize database để tối ưu nó. Cách tối ưu là bạn click chọn vào phần Check All để chọn tất cả các table.

wp-database-checkall

Sau đó ở phần With selected kế bên, bạn chọn Optimize Database.

wp-database-optimizedatabase

Hoặc bạn có thể sử dụng plugin WP Cleanup để dọn rác và tối ưu database tốt hơn.

Backup database bằng PhpMyAdmin

Một vài trường hợp bạn không thể dùng plugin để backup WordPress thì bạn còn có cách khác để thử đó là backup thủ công bằng PhpMyAdmin.

Sau khi chọn database trong PhpMyAdmin, bạn chọn phần Export và ấn Go để tải file backup của database về máy, file này có đuôi mở rộng là .sql.

wp-database-backup

Trường hợp cần khôi phục (restore) lại dữ liệu thì chỉ cần chuyển qua tab Import và upload file .sql lên.

Lời kết

Nếu bạn thấy bài này dễ hiểu thì cũng đơn giản thôi vì WordPress không có gì là khó hiểu cả. Hãy nhớ rằng trước khi đụng vào database để sửa các giá trị bên trong đó, hãy backup lại để nếu có xảy ra lỗi thì cũng còn đường mà khôi phục lại như cũ.

Học Wordpress

12 yêu cầu để website WordPress bạn tải nhanh hơn

137

Vấn đề tối ưu website WordPress để truy cập nhanh hơn luôn là vấn đề quan trọng bật nhất cho những ai đang quản trị website, vì website mà vào nhanh thì sẽ không bị mất khách hàng, tăng lượt truy cập quay lại do khách truy cập không phải đợi lâu.

Các bài viết hướng dẫn tăng tốc WordPress mình đã có viết khá nhiều rồi, nhưng qua các bài đó mình nhận thấy nhiều bạn vẫn thắc mắc tại sao website người ta chạy vù vù mà website mình thì lại như rùa bò sau khi tăng tốc. Thật sự mà nói, tốc độ của website không phải cứ tăng tốc là nhanh, hay cứ dùng host xịn là nhanh mà nó còn phụ thuộc vào rất nhiều yếu tố mà ở bài này mình sẽ liệt kê ra để bạn xem mình đã làm hết hay chưa.

Tăng tốc wordpress từ a to z (phần 2)

1. Hạn chế sử dụng plugin

Hạn chế sử dụng plugin không có nghĩa là bạn không sử dụng plugin mà sẽ đi tìm các giải pháp tự code hoặc tự kiếm code. Plugin cũng được viết từ code mà thôi mà có khi code trong plugin còn tối ưu hơn của bạn viết rất nhiều, cho nên cái gì thật sự cần thiết mà có plugin hỗ trợ thì hãy cứ dùng, còn không cần thiết thì không dùng, kể cả dùng code.

Khi có nhiều plugin, đồng nghĩa với việc server của bạn phải làm việc nhiều hơn để xử lý các đoạn code bên trong đó, mỗi plugin khi kích hoạt lên cũng sẽ lưu lại một dữ liệu nhỏ trong database nên nếu bạn thử quá nhiều plugin thì sẽ khiến table wp_options sẽ phình to ra hơn, lúc đó server lại mất tài nguyên và thời gian để “listing” dữ liệu trong database trước khi lấy dữ liệu tương ứng với truy vấn gửi đến.

Tips: Sử dụng plugin P3 để phân tích thời gian tải của từng plugin.

2. Sử dụng theme đơn giản

Một theme đẹp không có nghĩa là nó sẽ có lợi cho bạn, thực tế đã chỉ ra rằng theme càng đẹp, càng có nhiều tính năng thì nguy cơ làm ảnh hưởng đến tốc độ của website càng lớn.

Hãy thử tưởng tượng một theme dạng tin tức, nó sẽ có chức năng hiển thị các bài theo chuyên mục và nó sẽ hiển thị ở nhiều chuyên mục khác nhau. Điều này có nghĩa là nó sẽ sản sinh ra rất nhiều truy vấn từ khách truy cập gửi đến máy chủ, sẽ làm cho máy chủ bạn tốn nhiều tài nguyên hơn và nặng hơn là tràn bộ nhớ.

editor-themefree

Thứ hai, là các theme bóng bẩy luôn chứa rất nhiều CSS và Javascript để tạo ra các hiệu ứng, mà CSS và Javascript lại là một trong các nguyên nhân làm website bạn tải lâu hơn.

Do đó, theo lời khuyên của mình thì bạn nên sử dụng theme có cấu trúc càng đơn giản càng tốt nếu có thể, trường hợp bạn cần một theme rườm rà thì hãy chọn đúng các theme ở các nhà cung cấp uy tín vì không phải theme nào trả phí là nó đều chạy tốt, rất nhiều theme trả phí nhưng vẫn chứa nhiều bug, lúc này server lại càng có thêm việc để làm là ghi log lỗi có trong website.

3. Sử dụng cache là điều bắt buộc

Dù bạn sử dụng host khủng hay host cùi thì việc sử dụng một plugin hỗ trợ cache luôn là điều tối thiểu phải làm nếu như không muốn sống trong cảnh đợi chờ là hạnh phúc.

Sử dụng cache là một hình thức lưu dữ liệu đã qua xử lý vào một nơi nào đó (trên ổ cứng hoặc trên RAM) mà những người dùng tiếp theo sẽ không cần phải gửi truy vấn để lấy dữ liệu nữa mà sẽ đọc trực tiếp dữ liệu đó, như vậy sẽ giảm gánh nặng đáng kể cho server và thời gian tải trang.

Cache thì có rất nhiều loại, nếu bạn chỉ dùng Shared Host bình thường thì có thể sử dụng plugin WP Super Cache rất tốt, dễ cài đặt và tương thích hầu hết trên mọi nền tảng.

Nếu bạn muốn sử dụng cùng lúc nhiều loại cache hơn (như Disk, Browse Cache, Opcode Cache, Object Cache,..) thì có thể sử dụng plugin W3 Total Cache nhưng sẽ cần bạn biết cách cấu hình nó một chút, và chỉ nên sử dụng nó trên VPS hoặc Server riêng.

Còn nếu bạn chưa có bất cứ plugin cache nào, thì hãy cài ngay 1 cái, WP Super Cache là lựa chọn tốt để bạn bắt đầu.

4. Sử dụng host có máy chủ ở gần bạn

dedicated-server

Chẳng hạn nếu bạn có nhiều khách truy cập đến từ Việt Nam thì lựa chọn tốt nhất là hãy sử dụng các server ở gần bạn nhất như Singapore, Malaysia, Hongkong hoặc Việt Nam. Bởi lẽ dù host bạn có mạnh đến đâu đi chăng nữa, nhưng nếu nó lại ở quá xa thì tốc độ sẽ phần nào giảm đi ít nhiều.

Tham khảo thêm: Cẩm nang thuê hosting cho website WordPress.

5. Hãy sử dụng server riêng nếu có thể (VPS/Dedicated Server)

Nếu như website bạn đã có trên 5000 Unique Visitor mỗi ngày thì tốt nhất hãy nâng cấp lên sử dụng VPS có ít nhất 1GB RAM và 1 CPU nếu không muốn nhà cung cấp có thể đơn phương khóa dịch vụ của bạn bất cứ lúc nào vì tốn tài nguyên.

Hiện nay VPS cũng rất rẻ rồi vì xuất hiện công nghệ Cloud VPS, bạn có thể mua thuê 1 VPS tại Singapore chỉ với $10/tháng cho 1GB RAM/1CPU tại DigitalOcean, hoặc Linode cũng là một lựa chọn Cloud VPS rất tốt.

Còn nếu bạn đang lo lắng về cách sử dụng và quản trị VPS thì lại càng không đáng lo hơn vì mình đã có serie Hướng dẫn VPS căn bản đã và đang khóa hoàn chỉnh nên bạn có thể tham khảo.

6. Sử dụng CDN

amazon-cdn

Mô hình hoạt động của CDN

CDN (Content Devilery Network) là một công nghệ truyền tải các dữ liệu tĩnh (hình ảnh, file CSS và Javascript,..) thông qua proxy của các máy chủ CDN, nó sẽ tự nhận diện địa chỉ của người dùng và sẽ điều hướng họ qua proxy ở server gần nhất mà nó có hỗ trợ. CDN cực kỳ hữu dụng nếu bạn sử dụng các host nước ngoài và có lượng lớn hình ảnh trên website.

Các dịch vụ CDN miễn phí thì có CloudFlare là khá tốt, nó cũng bao gồm luôn việc lưu cache các file tĩnh để tăng tốc. Còn trả phí mà bạn có thể sử dụng thì có dịch vụ CloudFront của Amazon đang rất hot hiện nay.

Có thể bạn thích: KeyCDN – Dịch vụ CDN giá rẻ nhất hiện nay.

7. Tối ưu hình ảnh

Hình ảnh là nguyên nhân chính dẫn tới website load lâu hơn và tốn băng thông nhiều hơn vì dung lượng các tấm ảnh loại lớn không hề nhỏ, nếu website bạn đăng các ảnh với chất lượng cao như wallpaper máy tính, ảnh photographer thì lại càng nặng hơn.

Khi upload lên môi trường web, bạn thật sự không cần bức ảnh to và chất lượng như vậy, mà hãy nên thu nhỏ lại với kích thước lớn nhất là 800×600 và sử dụng các phần mềm nén ảnh xử lý trước khi upload. Nếu bạn cần khách có thể xem ảnh chất lượng cao thì có thể gói zip lại và upload lên dạng file, họ có thể tải về để xem ảnh chất lượng cao.

Nếu bạn không thể sử dụng phần mềm nén ảnh thì có thể dùng plugin WP Smush.it hoặc EWWW để nó tự giảm chất lượng hình ảnh mỗi khi upload lên máy chủ.

Xem thêm:

  • Tối ưu hình ảnh trên WordPress.
  • Sử dụng WP Performence Pack để tối ưu hình ảnh
  • Quản trị hình ảnh toàn tập

Một thủ thuật khác để tăng tốc độ tải cho những website sử dụng ảnh là sử dụng kỹ thuật tải không đồng bộ lên nó, bạn có thể sử dụng các plugin như BJ LazyLoad, Advanced LazyLoad để cấu hình website sẽ chỉ tải hình ảnh nếu người dùng xem tới vị trí của nó, còn không nó sẽ không tải.

8. Tối ưu database

Nếu website bạn đã có nhiều bài viết, dung lượng database đạt mức trên 100MB thì việc cấp bách bạn cần làm là nên tối ưu lại database để server có thể xử lý tốt hơn khi có truy vấn gửi vào.

Trước hết, hãy chắc chắn rằng database của bạn luôn được làm tươi vì nó cũng giống như ổ cứng vậy, sau khi thực hiện việc đọc/ghi dữ liệu quá nhiều nó cũng sẽ bị hiện tượng phân mảnh và chứa các dữ liệu rác (như log chẳng hạn) lưu trong đó, đó là chưa kể đến các dữ liệu không cần thiết như các transient, comment spam, bản nháp tự lưu, revisions,… Bạn có thể dễ dàng tối ưu database qua plugin tên là WP Optimize.

Còn nếu website bạn có mức độ lớn hơn, bạn có điều kiện hơn thì hãy sử dụng một máy chủ riêng để lưu trữ và xử lý database (Remote MySQL Server) vì việc xử lý database khá tốn tài nguyên nên nó sẽ làm ảnh hưởng đến việc xử lý các file PHP của server. Chỉ đơn giản là tìm một cái host khác và bỏ database vào đó rồi sửa phần hostname trong file wp-config.php thành địa chỉ của máy chủ đó. Hoặc bạn cũng có thể dùng các dịch vụ chuyên dụng hơn như Amazon RDS, Google Cloud Database.

9. Hạn chế kết nối với tài nguyên bên ngoài

Tài nguyên bên ngoài ở đây nghĩa là các dịch vụ có trỏ liên kết ra bên ngoài và khi vào website bạn phải tải nó, ví dụ như các mã nhúng Google Analytics, Google+, Facebook,…

Tốt nhất bạn chỉ nên chèn các dịch vụ thật sự cần thiết như Google Analytics, Google+, Facebook,..còn cái nào bạn có thể hạn chế được thì hạn chế vì không phải lúc nào các script đó cũng load tốt, đôi khi có thể do vài lý do nào đó mà khách sẽ không load nổi các đường dẫn trong script đó trong khi vào website bạn thì rất tốt.

10. Gzip và Cache cho trình duyệt

Gzip là một phương thức nén các dữ liệu nhận được từ máy chủ lại thành một gói dữ liệu nhỏ và gửi nó đến trình duyệt. Vì bản năng trình duyệt cũng là một phước thức tải file từ các website về dữ liệu cache của nó nên sẽ vô cùng mất thời gian nếu website bạn không sử dụng gzip. Sử dụng gzip có thể giúp website bạn được nén lại tới mức nhẹ tối đa nên khách truy cập sẽ tốn ít thời gian tải hơn.

Để kích hoạt gzip bạn có thể chèn đoạn sau vào file .htaccess (nếu sử dụng Shared Host/Apache):


# Start gzip compression
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
# End Gzip compression

Còn bạn dùng NGINX thì hãy chắc chắn file nginx.conf của bạn có các dòng này:


# Start Gzip compression
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-javascript text/xml text/css;
gzip_vary on;
# End Gzip Compression

Kết quả kiểm tra tại trang http://checkgzipcompression.com/ có thể cho bạn thấy website của bạn đã bật gzip chưa và đã được nén xuống còn bao nhiêu.

gzip-check

Kiểm tra website đã bật gzip hay chưa

Còn Cache cho trình duyệt (Browser Cache) là một cách để chỉnh sửa thời gian lưu bộ nhớ đệm của các file tĩnh như hình ảnh lâu lưu trữ lâu hơn ở trình duyệt trên máy tính, vì khi trình duyệt đã có cache các file đó rồi thì các lần load sau nó không phải mất công tải dữ liệu về nữa nên bạn sẽ truy cập được nhanh hơn.

Để thiết lập cache trình duyệt, bạn có thể chèn đoạn dưới vào file .htaccess (Apache):


# Browser caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType application/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>
# End Browser caching

Hoặc cho NGINX:


location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires max;
}

11. Sử dụng Host có ổ cứng SSD

Trong khi các file PHP sẽ gửi các truy vấn tới máy chủ để xử lý thì các file tĩnh được lưu trên server đều sẽ được webserver trực tiếp gửi nó đến trình duyệt qua thao tác ghi và chép. Dĩ nhiên nếu host bạn có một ổ cứng tốt, thì thời gian truy xuất các file tĩnh sẽ nhanh hơn rất nhiều so với các loại ổ cứng thông thường.

Vì lẽ đó, mình khuyên các bạn nên sử dụng một host hỗ trợ ổ cứng SSD nếu có thể, một số nhà cung cấp rất tốt có hỗ trợ ổ cứng SSD như:

  • AZDIGI
  • A2Hosting
  • StableHost
  • InmotionHosting
  • DigitalOcean
  • MediaTemplate

12. Phân tích tốc độ tải của website

gtmetrix

Ở trên đều là những yêu cầu chung, nhưng mỗi website sẽ có cấu trúc khác nhau nên việc bạn cần nên làm là thường xuyên kiểm tra tốc độ website, để biết được trên website của bạn có file nào tải lâu, file nào dung lượng lớn để bạn có hướng tối ưu thích hợp.

Tham khảo: 5 công cụ kiểm tra tốc độ website uy tín nhất.

Lời kết

Đó là 12 yêu cầu rất cơ bản và đơn giản mà bạn có thể tự làm được để có một website WordPress tải nhanh hơn. Như vậy bạn có thể thấy, việc tối ưu tốc độ của một website là gian nan như thế nào nên hãy tự thưởng cho bản thân mình nếu bạn đã có thể làm website bạn tải tốt hơn.

Một lý do rất quan trọng nữa để bạn phải tối ưu tốc độ website là nó có thể ảnh hưởng đến việc đánh giá thứ hạng của Google cũng như tỷ lệ khách mua hàng nếu như đó là website bán hàng, vì khách hàng luôn rất lười và họ thường không đủ kiên nhẫn để đợi.

Học Wordpress

Tối ưu bảng wp_options của WordPress

57

Việc tối ưu lại cơ sở dữ liệu luôn là một trong các việc quan trọng nhất cần phải làm khi một website đã có quá nhiều dữ liệu và có quá nhiều lượt truy cập. Bởi vì bạn biết rằng website càng có nhiều lượt truy cập thì website sẽ càng gửi nhiều truy vấn (query) về database để lấy dữ liệu ra (đa phần là truy vấn SELECT). Mà đã nhiều truy vấn rồi mà dữ liệu lại lớn, chưa được sắp xếp gọn gàng thì nó lại càng mất thêm thời gian để xử lý các truy vấn đó.

Ngoài việc dọn dẹp database mà mình đã trình bày ở lần trước, chúng ta còn một cách khác nhưng cũng rất quan trọng đó là tối ưu lại bảng wp_options của database. Bảng này sẽ chứa toàn bộ các thiết lập bên trong website, bao gồm các thiết lập theme và plugin. Điều đó có nghĩa là bạn đã từng cài nhiều plugin và theme vào website thì bảng này sẽ rất nặng mặc dù bạn đã tắt các plugin hoặc theme đó đi vì đa phần các plugin không hỗ trợ “làm sạch” chiến trường khi ta tắt đi để có thể sử dụng lại sau này.

Debug truy vấn

Trước tiên, chúng ta cần nên xem trực tiếp các query có trên website và thời gian thực thi của nó để coi có query của plugin nào chiếm nhiều thời gian không. Có một cách làm việc này đó là sử dụng plugin Query Monitor.

Nhưng trước khi cài đặt nó, bạn bật debug trong wp-config.php lên.

define(‘WP_DEBUG’, true);

Sau đó ở mỗi trang, bạn sẽ xem được query của nó bằng cách ấn vào nút xem debug ở Admin Bar.

query-monitor-adminbarBạn ấn vào và chọn Queries để xem các truy vấn nhé. Bây giờ bạn có thể biết trên trang đó có bao nhiêu truy vấn, mỗi truy vấn tốn bao nhiêu thời gian.

query-monitor-querytime

Nếu bạn thấy mình có quá nhiều truy vấn gửi vào table wp_posts thì hãy:

  • Hạn chế sử dụng truy vấn để lấy bài viết ra, bao gồm các widget. Các theme tin tức thường có rất nhiều query kiểu thế này.
  • Hạn chế số lượng bài viết hiển thị trên mỗi trang.
  • Ngoài ra bạn cũng có thể sẽ thấy truy vấn ở một vài plugin. Nếu bạn thấy plugin đó không cần thiết thì tắt đi.

Kế tiếp là bạn ấn vào menu Debug, chọn Hooks và bạn sẽ thấy có bao nhiêu thành phần được load ra như có bao nhiêu theme được kích hoạt, bao nhiêu hook ở widget, theme sử dụng hook nào để thực thi,…và nếu hạn chế được càng nhiều thì càng tốt.

query-monitor-hooks

Ngoài ra bạn có thể xem thêm phần PHP Errors để xem có lỗi nào trong PHP không, nó sẽ cho bạn biết lỗi đó là gì, nằm ở file nào đoạn số bao nhiêu trong code để bạn biết mà sửa.

Tối ưu bảng wp_options

Cột autoload trong bảng wp_options nghĩa là để nó xác định xem tuỳ chọn đó có được tải mặc định tự động ra bên ngoài hay không. Điều đó có nghĩa là mặc dù các plugin của bạn không dùng nữa nhưng các thiết lập trong database vẫn còn thì nó vẫn là autoload, đây là lý do sốt một khiến tốc độ truy cập website bị chậm đi.

Trong bài này có sử dụng truy vấn SQL. Để chạy truy vấn SQL, bạn vào phpMyAdmin -> chọn database cần làm việc và chọn tab SQL. Hoặc nếu bạn không có phpMyAdmin thì đăng nhập vào MySQL Server rồi gõ USE tên_database để chọn database.

Trước hết, chúng ta kiểm tra xem bảng wp_options có bao nhiêu hàng.

[sql]explain SELECT option_name, option_value FROM wp_options WHERE autoload = ‘yes'[/sql]

+------+-------------+---------------+------+---------------+------+---------+------+------+-------------+
| id   | select_type | table         | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+------+-------------+---------------+------+---------------+------+---------+------+------+-------------+
|    1 | SIMPLE      | wp_options | ALL  | NULL          | NULL | NULL    | NULL |  808 | Using where |
+------+-------------+---------------+------+---------------+------+---------+------+------+-------------+

Như các bạn thấy là chúng ta có thể thấy được mình đang có 808 hàng trong bảng wp_options. Bây giờ hãy thử thêm INDEX cho cột autoload để xem sự khác biệt.

[sql]ALTER TABLE `wp_options` ADD INDEX (`autoload`);[/sql]

Bây giờ bạn chạy lại truy vấn ở trên xem nó đã có giảm số hàng xuống chưa, đồng thời cột Extra của mình nó sẽ để là Using index condition.

+------+-------------+---------------+------+---------------+----------+---------+-------+------+-----------------------+
| id   | select_type | table         | type | possible_keys | key      | key_len | ref   | rows | Extra                 |
+------+-------------+---------------+------+---------------+----------+---------+-------+------+-----------------------+
|    1 | SIMPLE      | wp_options | ref  | autoload      | autoload | 82      | const |  762 | Using index condition |
+------+-------------+---------------+------+---------------+----------+---------+-------+------+-----------------------+

Ngoài ra thì tốc độ truy vấn của mình cũng giảm đáng kể.

Trước đó:

query-monitor-adminbarSau khi thêm INDEX

query-monitor-after-indexThế thì tại sao sử dụng INDEX trong MySQL lại giúp bạn giảm thời gian gửi truy vấn?

Bạn hãy tưởng tượng rằng, INDEX giống như bạn đánh số cho từng trang sách vậy. Khi bạn cần tìm một cái gì đó thì bạn chỉ cần giở ra đúng số trang mà bạn cần tìm thay vì ngồi mò từng trang, phải không? INDEX trong MySQL cũng thế, nó sẽ giúp cho các truy vấn WHERE tìm kiếm dữ liệu nhanh hơn để lấy ra bên ngoài.

Nếu bạn muốn thì bạn có thể thêm INDEX cho cột post_id và meta_key trong bảng wp_postmeta.

[sql]
ALTER TABLE `wp_postmeta` ADD INDEX (`meta_key`);
ALTER TABLE `wp_postmeta` ADD INDEX (`meta_key`);
[/sql]

Xoá bớt các options không sử dụng

Như mình nói ở trên, mặc định table có cột autoload mà nếu hàng nào có giá trị là yes thì nó sẽ mặc định được gửi ra toàn bộ trong khi WordPress tải website của bạn. Nếu bạn dùng website đã lâu, đã từng sử dụng qua nhiều plugin nay không dùng nữa thì nên xoá đi các tuỳ chọn của nó trong bảng wp_options. Bạn có thể browse bảng này và xoá đi các tuỳ chọn giống như mình làm ở dưới, cẩn thận với các tuỳ chọn mặc định của WordPress (ở các trang đầu tiên).

Xoá các options không sử dụng nữa.

Xoá các options không sử dụng nữa.

Lời kết

Tạm thời trong bài này mình chỉ nói qua về việc kiểm soát query và sử dụng INDEX cho database của WordPress. Nhưng mình tin rằng với những tips nhỏ ở trên nhưng nó sẽ giúp website đạt hiệu suất cao hơn rất nhiều, đặc biệt là các website lớn. Hãy nhớ rằng, khi dùng plugin bạn nên chú ý các plugin tốn tài nguyên để giảm tải cho cả PHP lẫn MySQL nhé.

Và trong một dịp khác, mình sẽ chia sẻ một kỹ thuật scaling database mà các website lớn vẫn thường dùng, đó là load balance với database trên một server khác.