Đối với cơ sở dữ liệu MySQL, các hạn chế thông thường của chúng tôi đối với giới hạn dung lượng ổ đĩa và tài nguyên máy chủ được áp dụng, bao gồm mức sử dụng bộ nhớ, mức sử dụng CPU và ghi đĩa. Nói cách khác, việc sử dụng tài nguyên máy chủ của bất kỳ truy vấn MySQL nào bạn thực hiện được tính vào giới hạn tài nguyên của bạn, giống như việc sử dụng chính tập lệnh
Ngoài ra, giới hạn kích thước thực tế đối với cơ sở dữ liệu MySQL với dịch vụ lưu trữ được chia sẻ là
- Cơ sở dữ liệu không được chứa hơn 1.000 bảng;
- Mỗi bảng riêng lẻ không được vượt quá kích thước 1 GB hoặc 20 triệu hàng;
- Tổng kích thước của tất cả các bảng trong cơ sở dữ liệu không được vượt quá 2 GB
Các giới hạn này khá cao. nhỏ hơn 0. 05% khách hàng của chúng tôi từng tạo cơ sở dữ liệu lớn như vậy và chúng tôi sẽ thông báo cho bạn nếu điều đó xảy ra. [Nếu bạn nhận được thông báo như vậy, bạn có thể muốn thử tối ưu hóa bảng để xem liệu nó có thể được nén để tiết kiệm dung lượng hay không, mặc dù điều này có thể ngăn cập nhật bảng trong vài phút. ]
Mặc dù chúng tôi không thực thi các giới hạn này theo cách thủ công để ngăn bạn vượt quá chúng với số lượng nhỏ, nhưng bạn có thể gặp sự cố nếu làm như vậy. Ví dụ: các tập lệnh trên trang web của bạn có thể hết thời gian chờ trong quá trình sao lưu MySQL của các bảng lớn như vậy. Một ví dụ khác, chúng tôi giới hạn kích thước bảng tạm thời của MySQL ở mức 6 GB, điều này có thể ngăn việc sắp xếp các bảng chưa lập chỉ mục có kích thước vượt quá 1 GB. Ngoài ra, chúng tôi có thể vô hiệu hóa các cơ sở dữ liệu vượt quá các giới hạn này nếu chúng can thiệp vào các cơ sở dữ liệu khác trên cùng một máy chủ
Tôi có thể trả tiền cho bạn cho một gói vượt quá các giới hạn này không?
không may măn. Các giới hạn như thế này vốn có trong dịch vụ lưu trữ cơ sở dữ liệu dùng chung, đây là loại duy nhất chúng tôi cung cấp; . Nếu bạn không thể làm như vậy, rất tiếc, bạn sẽ cần phải chuyển trang web của mình sang một máy chủ chuyên dụng có thể xử lý tải trọng cao
Có điều gì khác mà tôi nên biết về MySQL và các tập dữ liệu lớn không?
Nếu bạn đang nhập một lượng lớn dữ liệu, hãy đảm bảo rằng bạn đang làm theo các mẹo trên trang "Nhập MySQL lớn" của chúng tôi. Điều đó sẽ tránh được các sự cố và giúp quá trình nhập của bạn diễn ra nhanh hơn nhiều
Nếu bạn muốn lấy kích thước của chỉ một cơ sở dữ liệu thay vì toàn bộ kết nối, hãy chèn WHERE
vào câu lệnh
SELECT
table_schema AS 'DB Name',
ROUND[SUM[data_length + index_length] / 1024 / 1024, 1] AS 'DB Size in MB'
FROM
information_schema.tables
WHERE
table_schema = 'db_name'
GROUP BY
table_schema;
Cần một Công cụ GUI tốt cho MySQL? .
Giống như hầu hết các cơ sở dữ liệu quan hệ, MySQL cung cấp siêu dữ liệu hữu ích về chính cơ sở dữ liệu đó. Trong khi hầu hết các cơ sở dữ liệu khác gọi thông tin này là catalog
, thì tài liệu chính thức của MySQL lại gọi siêu dữ liệu INFORMATION_SCHEMA
là tables
Bất kể tên là gì, điều quan trọng là thông tin được cung cấp bởi các bảng INFORMATION_SCHEMA
này. Tất cả mọi thứ từ views
và
+----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
0 đến +----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
1 và tables
đều có thể được tìm thấy trong INFORMATION_SCHEMA
. Đối với mục đích của chúng tôi, chúng tôi đặc biệt quan tâm đến siêu dữ liệu tables
mà chúng tôi có thể truy vấn để thực sự trích xuất kích thước của các bảng khác nhau trong hệ thốngLiệt kê kích thước bảng từ một cơ sở dữ liệu duy nhất
Như có thể thấy trong tài liệu chính thức, bảng
+----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
5 chứa khoảng 20 cột, nhưng với mục đích xác định dung lượng ổ đĩa được sử dụng bởi các bảng, chúng tôi sẽ tập trung cụ thể vào hai cột. +----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
6 và +----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
7
6 là độ dài [hoặc kích thước] của tất cả dữ liệu trong bảng [trong+----------------------------------+-----------+ | Table | Size [MB] | +----------------------------------+-----------+ | book | 267 | | author | 39 | | post | 27 | | cache | 24 | ...
9]+----------------------------------+-----------+ | Table | Size [MB] | +----------------------------------+-----------+ | book | 267 | | author | 39 | | post | 27 | | cache | 24 | ...
7 là độ dài [hoặc kích thước] của tệp chỉ mục cho bảng [cũng trong+----------------------------------+-----------+ | Table | Size [MB] | +----------------------------------+-----------+ | book | 267 | | author | 39 | | post | 27 | | cache | 24 | ...
9]+----------------------------------+-----------+ | Table | Size [MB] | +----------------------------------+-----------+ | book | 267 | | author | 39 | | post | 27 | | cache | 24 | ...
Được trang bị thông tin này, chúng ta có thể thực hiện một truy vấn liệt kê tất cả các bảng trong một cơ sở dữ liệu cụ thể cùng với dung lượng đĩa [kích thước] của mỗi bảng. Chúng tôi thậm chí có thể sáng tạo hơn một chút và chuyển đổi các giá trị kích thước bình thường từ
+----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
9 thành thứ gì đó hữu ích và dễ hiểu hơn đối với hầu hết mọi người như SELECT
TABLE_NAME AS `Table`,
ROUND[[DATA_LENGTH + INDEX_LENGTH] / 1024 / 1024] AS `Size [MB]`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
AND
TABLE_NAME = "book"
ORDER BY
[DATA_LENGTH + INDEX_LENGTH]
DESC;
3SELECT
TABLE_NAME AS `Table`,
ROUND[[DATA_LENGTH + INDEX_LENGTH] / 1024 / 1024] AS `Size [MB]`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
ORDER BY
[DATA_LENGTH + INDEX_LENGTH]
DESC;
Trong ví dụ này sử dụng cơ sở dữ liệu
SELECT
TABLE_NAME AS `Table`,
ROUND[[DATA_LENGTH + INDEX_LENGTH] / 1024 / 1024] AS `Size [MB]`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
AND
TABLE_NAME = "book"
ORDER BY
[DATA_LENGTH + INDEX_LENGTH]
DESC;
4, chúng tôi đang kết hợp +----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
6 và +----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
7 thành +----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
9, sau đó chia nó cho SELECT
TABLE_NAME AS `Table`,
ROUND[[DATA_LENGTH + INDEX_LENGTH] / 1024 / 1024] AS `Size [MB]`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
AND
TABLE_NAME = "book"
ORDER BY
[DATA_LENGTH + INDEX_LENGTH]
DESC;
8 hai lần để chuyển đổi thành SELECT
TABLE_NAME AS `Table`,
ROUND[[DATA_LENGTH + INDEX_LENGTH] / 1024 / 1024] AS `Size [MB]`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
AND
TABLE_NAME = "book"
ORDER BY
[DATA_LENGTH + INDEX_LENGTH]
DESC;
9 và sau đó là SELECT
TABLE_NAME AS `Table`,
ROUND[[DATA_LENGTH + INDEX_LENGTH] / 1024 / 1024] AS `Size [MB]`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
AND
TABLE_NAME = "book"
ORDER BY
[DATA_LENGTH + INDEX_LENGTH]
DESC;
3. Tập kết quả của chúng tôi sẽ trông giống như thế này+----------------------------------+-----------+
| Table | Size [MB] |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
Nếu bạn không quan tâm đến tất cả các bảng trong cơ sở dữ liệu và chỉ muốn kích thước của một bảng cụ thể, bạn chỉ cần thêm
+-------+-----------+
| Table | Size [MB] |
+-------+-----------+
| book | 267 |
+-------+-----------+
1 row in set [0.00 sec]
1 vào mệnh đề +-------+-----------+
| Table | Size [MB] |
+-------+-----------+
| book | 267 |
+-------+-----------+
1 row in set [0.00 sec]
2. Ở đây chúng tôi chỉ muốn thông tin về bảng +-------+-----------+
| Table | Size [MB] |
+-------+-----------+
| book | 267 |
+-------+-----------+
1 row in set [0.00 sec]
3SELECT
TABLE_NAME AS `Table`,
ROUND[[DATA_LENGTH + INDEX_LENGTH] / 1024 / 1024] AS `Size [MB]`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
AND
TABLE_NAME = "book"
ORDER BY
[DATA_LENGTH + INDEX_LENGTH]
DESC;
Kết quả, như mong đợi, bây giờ
+-------+-----------+
| Table | Size [MB] |
+-------+-----------+
| book | 267 |
+-------+-----------+
1 row in set [0.00 sec]
Liệt kê tất cả các kích thước bảng từ TẤT CẢ cơ sở dữ liệu
Nếu bạn đang gặp sự cố trong đó cơ sở dữ liệu của bạn đang tăng kích thước nhưng bạn không biết bảng nào là thủ phạm, thì có thể hữu ích khi truy vấn kích thước của tất cả các bảng trong tất cả các cơ sở dữ liệu trong toàn bộ hệ thống. Điều này có thể được thực hiện dễ dàng với truy vấn sau
SELECT
TABLE_SCHEMA AS `Database`,
TABLE_NAME AS `Table`,
ROUND[[DATA_LENGTH + INDEX_LENGTH] / 1024 / 1024] AS `Size [MB]`
FROM
information_schema.TABLES
ORDER BY
[DATA_LENGTH + INDEX_LENGTH]
DESC;
Điều này sẽ trả về không chỉ kích thước của bảng mà còn cả tên bảng và cơ sở dữ liệu mẹ mà nó được liên kết với