Caching Mysql Database là gì

Read Time:7 Minute, 5 Second

1. Database caching là gì?

– Database Caching là một kỹ thuật được sử dụng trong hầu hết các hệ thống cơ sở dữ liệu hosting ,… chiếm 96.69%, nhằm tăng độ truy xuất dữ liệu và giảm tải cho hệ thống. Đây là một kỹ thuật đơn giản nhưng vô cùng hiệu quả. Bởi vì Cache là nơi lưu tập hợp các dữ liệu, thường có tính chất nhất thời, cho phép sử dụng lại dữ liệu đã lấy hoặc tính toán trước đó, nên sẽ giúp tăng tốc cho việc truy xuất dữ liệu ở những lần sau.

2. Database caching hoạt động như thế nào?

Database caching hoạt động như thế nào?
Database caching hoạt động như thế nào?

– Dữ liệu trong disk/ổ cứng sẽ được CPU xử lý sau đó được lưu trữ lại. Tức là ta hi sinh memory/disk để giảm thời gian xử lý ở CPU nhằm tăng tốc độ giảm tải hệ thống. Database caching (bộ đệm cơ sở dữ liệu) thường được lưu trữ trong RAM (Random-access memory). Mục đích chính của cache là tăng hiệu suất truy xuất dữ liệu. Cache thường lưu trữ một tập hợp con dữ liệu tạm thời.

RAMIn-Memory Engines

– Do tốc độ request cao hoặc IOPS (Input/Output operations per second) được hỗ trợ bởi RAM và In-Memory engines, cache giúp cải thiện hiệu suất truy xuất dữ liệu và giảm chi phí. Để hiệu xuất với hệ thống database và phần cứng truyền thống, cần khá nhiều tài nguyên. Và điều này có thể đội giá chi phí lên mà vẫn không thể đạt được hiệu suất nhanh chóng (ít độ trễ khi lấy data) như việc dùng In-Memory cache.

VD: Giả sử mỗi giây bạn nhận được 100 request, mỗi request sẽ mất 1s để chờ database query xử lý. Database sẽ dễ bị quá tải

+ Sử dụng caching để cache kết quả query vào RAM, lúc này thời gian tuy xuất chỉ còn tầm 50-100ms, lại không phải cần truy cập database. Hệ thống được giảm tải, còn người dùng lại nhận được kết quả nhanh hơn rất nhiều nhiều.

Database caching hoạt động như thế nào?
Database caching hoạt động như thế nào?

Ngoài ra: Với các truy vấn như vậy máy chủ sẽ dành ra một lượng tài nguyên nhất định để xử lý và các bạn hãy tưởng tượng có 1000 hay thậm chí 10000 truy vấn cùng một lúc như vậy vào database thì sẽ như thế nào ? Máy chủ sẽ quá tải và website sẽ chậm thậm chí bị timeout.

3. Ưu nhược điểm của database caching

– Ưu Điểm

+ Cải thiện tốc độ, các yêu cầu gần như có thể đáp ứng tức thời.

+ Giảm thiểu băng thông, giảm thiểu hoạt động mạng bị lặp lại nhiều lần không cần thiết.

+ Tăng hiệu suất phần cứng, tăng hiệu suất, giảm thiểu các xử lý phải thông qua CPU.

+ Đáp ứng nhu cầu truy cập khi mạng bị gián đoạn.

+ Đáp ứng lưu lượng truy cập lớn (với kinh nghiệm đã từng sử dụng qua nhiều gói hosting. Một ưu điểm cực kỳ lớn đối với các gói hosting hỗ trợ cache là phục vụ được lưu lượng truy cập lớn. Đặc biệt memcached hosting chịu được lượng truy cập gấp 3-4 lần so với các gói khác)

– Nhược điểm

+ Nếu sử dụng cache thường xuyên mà không được update sẽ bị nhầm lẫn do hệ thống lỗi.

VD: Giả sử người dùng đăng comment trong 1 bài viết, khi refresh lại trang, ta hiển thị dữ liệu trong cache trước khi có comment. Người dùng sẽ cảm thấy … bối rối và tưởng hệ thống bị lỗi.

Để tránh trình trạng trên ta cần làm mới lại dữ liệu sau nhiều lần truy vấn.

Tuy nhiên  nếu refresh quá thường xuyên thì cache trở nên … vô dụng (vì tự tính luôn cho rồi).

4. Tạm Kết

– Database caching là một kĩ thuật giúp tăng tốc độ xử lý. Kĩ thuật này đơn giản, dễ implement mà lại vô cùng hiệu quả nên được sử dụng trong rất nhiều hệ thống cở sở dữ liệu.

5. Cấu hình Query Cache trên MySQL.

– Có rất nhiều cách để tối ưu database chạy trên nền tảng MySQL và một trong số đó là bật tính năng “Query Caching” (MySQL query cache) được tích hợp sẵn trong MySQL từ phiên bản 4.0.1. Query Caching cho phép lưu lại những câu truy vấn SQL trên RAM để khi có các yêu cầu xử lý truy vấn tương tự vào các lần tiếp theo, máy chủ sẽ không dùng tài nguyên để xử lý nữa mà lấy thông tin đã lưu trữ trên RAM (cache) trước đó trả kết quả ngay.

5.1 Thực hiện cấu hình

– Đầu tiên các bạn truy cập vào dòng lệnh MySQL với quyền root. Sau đó kiểm tra tính năng Query Caching đã có sẵn trong MySQL hay chưa bằng câu lệnh sau:

mysql> show variables like 'have_query_cache';
+-------------------------+--------+
| Variable_name         - | Value  |
+-------------------------+--------+
| have_query_cache        | YES    |
+-------------------------+--------+
1 row in set (0.00 sec)

– Nếu kết quả là “YES” thì phiên bản MySQL bạn đang sử dụng đã hỗ trợ sẵn tính năng này. Tuy nhiên mặc định nó sẽ không được bật lên.

– Nếu kết quả là “NO” thì bạn cần cài lại phiên bản MySQL phù hợp hơn.

5.2 Kích hoạt

Tiếp theo các bạn sẽ gán “query_cache_size”  chính là dung lượng lưu trữ các truy vấn đã được cache. Lưu ý dung lượng này nằm trên RAM không phải trên Disk các bạn nhé. Vì vậy tùy thuộc vào cấu hình máy chủ mà các bạn cân đối cho phù hợp. Trong bài viết này mình sẽ gán 512 MB cho cache bằng câu truy vấn sau:

mysql> set global query_cache_size = 536870912;

Query OK, 0 rows affected (0.00 sec)

Tiếp theo các bạn bật tính năng Query Caching bằng câu truy vấn sau:

mysql> set global query_cache_type = 1;

Query OK, 0 rows affected (0.00 sec)

“query_cache_type” có ba tùy chọn sử dụng:

– query_cache_type = 0 là tắt cache

– query_cache_type = 1 hoặc query_cache_type = ON là bật cache

– query_cache_type = DEMAND chỉ cache những truy vấn nào có tùy chọn SQL_CACHE. Dành cho các trường hợp các bạn chỉ muốn cache một vài truy vấn cụ thể nào đó và không cache toàn bộ truy vấn còn lại.

5.3 Kiểm tra cài đặt

– Đến đây thì đã hoàn thành rồi đấy, các bạn kiểm tra lại kết quả bằng truy vấn sau:

mysql> show status like 'Qc%';
+-------------------------------------+---------------+
| Variable_name                       |      Value    |
+-------------------------------------+---------------+
| Qcache_free_blocks                  | 1             |
| Qcache_free_memory                  | 535720856     |
| Qcache_hits                         | 27082         |
| Qcache_inserts                      | 7831          |
| Qcache_lowmem_prunes                | 0             |
| Qcache_not_cached                   | 570           |
| Qcache_queries_in_cache             | 308           |
| Qcache_total_blocks                 | 626           |
+-------------------------------------+---------------+
8 rows in set (0.003 sec)

Các tham số:

– Qcache_free_memory: là dung lượng còn trống được gán bởi tham số query_cache_size phía trên.

– Qcache_inserts: là số lượng query đã thực thi xong và được đưa vào cache.

– Qcache_hits: là số lượng query đã được lấy từ cache.

– Qcache_lowmem_prunes: là số lượng các query không thể cache do thiếu RAM.

Lưu ý:

– Các truy vấn có kèm tùy chọn “SQL_NO_CACHE” thì mặc nhiên câu truy vấn đó sẽ không bị cache.

– Các truy vấn INSERT / UPDATE / DELETE sẽ được thực thi vào trong database mà không bị cache.

– Nếu khởi động lại MySQL các cấu hình trên sẽ mất tác dụng. Để áp dụng vĩnh viễn các bạn cần phải khai báo vào file config của MySQL tại đường dẫn sau:

# vi /etc/my.cnf

Thêm nội dung sau:

[mysqld]

query_cache_size = 535720856

query_cache_type = 1

Sau đó thực hiện khởi động lại MySQL để áp dụng cấu hình mới

# systemctl restart mysqld

Như vậy có thể thấy rằng khi truy cập vào một bài viết có cùng truy vấn thì Query Caching sẽ giúp giảm tải đi đáng kể tài nguyên máy chủ.

Các truy vấn được cache lại cũng sẽ trả kết quả nhanh hơn so với truy vấn không được cache. Các bạn hay thử tối ưu và trải nghiệm nhé.

Kiến Thức System chúc các bạn thành công!

✏️ Tác giả bài viết

Admin KTSYSTEM

Xin Chào mình là quản trị Viên Website system.info.vn Mình rất thích tìm hiểu về công nghệ mới, học hỏi và tìm tòi nghiên cứu về quản trị và bảo mật về hệ thống.
administrator
Happy
Happy
100 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

Trả lời

Email của bạn sẽ không được hiển thị công khai.