NGUYEN XUAN CUONG

http://nxcuong.ued.vn

Tính các thông số tối ưu database mysql

Tính các giá trị tối ưu Database MySQL
MySQL
https://techblog.vn/cai-dat-ha-galera-cluster-mariadb-su-dung-maxscale-tren-centos-6

http://techinfobest.com/optimize-mysql-table_open_cache/

link noi ve key effcuency https://stackoverflow.com/questions/3845014/what-is-mysql-key-efficiency

1. tìm các giá trị hiện tại open_tables and opened_tables
mysql> show global status like 'open%';
+--------------------------+---------+
| Variable_name | Value |
+--------------------------+---------+
| Open_files | 1583 |
| Open_streams | 0 |
| Open_table_definitions | 1400 |
Open_tables | 2000 |
| Opened_files | 2619222 |
| Opened_table_definitions | 110583 |
Opened_tables | 482099 |
+--------------------------+---------+
7 rows in set (0.00 sec)

2. Tìm Table cache hit rate
Table cache hit rate = table_open_cache*100/Opened_tables.
= 2000*100/482099
= 0.41%
Nói chung là phải hơn 50%. Vì vậy, bạn cần tăng giá trị của table_open_cache, mặc dù có rất nhiều lý do để có giá trị Opened_tables cao. Giống như FLUSH TABLES sẽ đóng tất cả các bảng đang mở và mở lại nó, điều này làm tăng đáng kể giá trị của Opened_tables.

Ở giai đoạn này, bạn gần như chắc chắn biến hệ thống table_open_cache không được điều chỉnh đúng. Bây giờ bạn phải tối ưu hóa MySQL table_open_cache và tìm ra giá trị hoàn hảo cho việc này. Để tìm giá trị được điều chỉnh của giá trị table_open_cache, hãy làm theo các bước dưới:

Tìm tổng số tables trong database
mysql> SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';
+----------+
| COUNT(*) |
+----------+
| 2020 |
+----------+
1 row in set (0.05 sec)

Tìm số threads hiện tại đã kết nối đến database.
mysql> show global status like '%Threads_connected%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_connected | 39 |
+-------------------+-------+
1 row in set (0.00 sec)

Sẽ là tốt nhất nếu bạn lấy các threads được kết nối vào thời điểm bận rộn nhất của cơ sở dữ liệu của bạn, hoặc lấy nhiều lần vào các thời điểm khác nhau và lấy số trung bình

Tính toán giá trị của table_open_cache và cài đặt nó
Table_open_cache = total_tables*Threads_connected
= 2020*39
= 78780
table_open_cache = 4096                //tong so table x thread connected ~ 1292 x 7 = 9044 ( vao luc 10:00 PM ) // theo cấu hình hiện tại

vì tất cả các kết nối (luồng) của người dùng không truy cập đến tất cả các bảng, do đó tôi nghĩ bạn nên đặt 50% vào giá trị tính toán, bởi vì giá trị của biến này quá lớn sẽ có một số tác dụng phụ khác
Table_open_cache = total_tables*Threads_connected*.50 1292 x 7 x 50% = 4522 ( gần khớp với giá trị hiện tại là 4090)

Cùng với table_open_cache bạn cũng nên điều chỉnh biến hệ thống của open_files_limit

nói chung nó bằng Table_open_cache*2
open_files_limit = Table_open_cache*2 

Open_files_limit không phải là biến động nên cần phải restart lại msql

Go to your Mysql configuration file (in linux it is /etc/my.cnf) and set the table_open_cache and open_files_limit
vi /etc/my.cnf
table_open_cache=39390
open_files_limit=78780
Restart the MySQL ( In Linux it is like)
/etc/init.d/mysqld restart
or
/etc/init.d/mysql restart

Cơ sở dữ liệu tôi đã lấy có 2020 bảng nên giá trị của table_open_cache hơi lớn. Đối với trường hợp của bạn, nó có thể nhỏ đáng kể.
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây