Kích thước bảng heap tối đa mysql

Với Halloween tất cả trừ một ký ức xa xôi, đã đến lúc chuyển sự chú ý của chúng ta sang mùa lễ sắp tới. Đầu tiên là Lễ Tạ Ơn, sau đó là Thứ Sáu Đen và Thứ Hai Điện Tử, đỉnh cao là mùa mua sắm Giáng sinh/tuần quyền anh. Đối với các chủ doanh nghiệp, thời điểm này trong năm đánh dấu thời điểm chốt lãi cuối năm được chờ đợi từ lâu. Đối với một số DBA, nó mang lại sự sợ hãi, lo lắng và thậm chí là những đêm mất ngủ để đưa hệ thống trở lại trực tuyến

Rất may, đây không phải là trường hợp. Với một chút chủ động điều chỉnh các biến hiệu suất của MySQL, bạn có thể bảo vệ (các) máy chủ cơ sở dữ liệu của mình trước sự tấn công của nhu cầu gia tăng mà mùa mua sắm mang lại

Mẹo số 1. Xác định số lượng kết nối MySQL tối đa

Ước tính ban đầu tốt cho số lượng kết nối tối đa trên MySQL là cứ năm yêu cầu đến máy chủ web của bạn thì có một kết nối. Một vài trong số năm yêu cầu tới máy chủ web của bạn sẽ dành cho các tài nguyên như biểu định kiểu CSS, hình ảnh và tập lệnh. Có thể khó có được tỷ lệ yêu cầu MySQL trên máy chủ web chính xác do những thứ như bộ nhớ đệm của trình duyệt; . Ví dụ: tệp nhật ký “access_log” của Apache có thể được truy cập thủ công hoặc thông qua các tiện ích như Analog hoặc Webalizer< . .

Khi bạn đã đạt được ước tính chính xác cho mức sử dụng cụ thể của mình, hãy nhân tỷ lệ đó với số lượng kết nối tối đa của máy chủ web của bạn. Ví dụ: nếu máy chủ web của bạn được định cấu hình để phục vụ tối đa 256 máy khách và tỷ lệ yêu cầu MySQL của bạn so với. yêu cầu web là 1/8, bạn muốn đặt số lượng kết nối cơ sở dữ liệu tối đa của mình là 32. Để bao gồm một giới hạn an toàn, hãy nhân số đó với hai, để có được số cuối cùng của bạn. Chỉ khi bạn có cơ sở hạ tầng để hỗ trợ thì bạn mới nên cố gắng khớp số lượng kết nối cơ sở dữ liệu tối đa với giới hạn máy khách của máy chủ web của bạn. Trong hầu hết các trường hợp, tốt nhất bạn nên giữ nó gần 32

Xem các kết nối MySQL trong Monyog

Trong MySQL, số lượng kết nối đồng thời tối đa tới MySQL được lưu trữ trong biến max_connections toàn cầu. Monyog báo cáo biến max_connections dưới dạng chỉ số “Được phép tối đa” trong nhóm giám sát Kết nối hiện tại. Nó cũng chia con số đó cho số lượng kết nối đang mở để tạo ra Mức sử dụng kết nối dưới dạng phần trăm

Kích thước bảng heap tối đa mysql

Ngoài ra còn có màn hình Lịch sử kết nối có thể là công cụ tính toán số lượng kết nối đồng thời tối đa tối ưu. Nó bao gồm số lượng kết nối đã cố gắng, bị từ chối và thành công. Ngoài ra, chỉ số Tỷ lệ phần trăm số lượng kết nối tối đa cho phép được hiển thị dưới dạng thanh tiến trình cho phép bạn nhanh chóng đánh giá mức độ gần với số lượng kết nối đồng thời tối đa mà một máy chủ đã đạt được trong quá khứ

Kích thước bảng heap tối đa mysql

Mẹo số 2. Phân bổ đủ bộ nhớ cho các bảng tạm thời

Trong một số trường hợp, máy chủ tạo các bảng tạm thời bên trong khi xử lý các câu lệnh. Bảng tạm thời được sử dụng cho các hoạt động nội bộ, chẳng hạn như nhóm theo và riêng biệt, một số truy vấn ĐẶT HÀNG THEO, UNION và truy vấn con trong mệnh đề TỪ (bảng dẫn xuất). Chúng được tạo trong bộ nhớ dưới dạng bảng Bộ nhớ. Kích thước tối đa cho các bảng tạm thời trong bộ nhớ được xác định từ bất kỳ giá trị nào của tmp_table_size và max_heap_table_size nhỏ hơn. Nếu kích thước của bảng tạm thời vượt quá ngưỡng này, nó sẽ được chuyển đổi thành bảng InnoDB hoặc MyISAM trên đĩa. Ngoài ra, các bảng tạm thời luôn chuyển trực tiếp vào đĩa nếu truy vấn liên quan đến các cột BLOB hoặc TEXT, không thể lưu trữ trong các bảng Bộ nhớ

Chuyển đổi này tốn kém, vì vậy hãy xem xét tăng kích thước của các biến max_heap_table_size và tmp_table_size để giúp giảm số lượng bảng tạm thời được tạo trên đĩa. Hãy nhớ rằng bạn sẽ cần rất nhiều bộ nhớ vì kích thước của các bảng tạm thời trong bộ nhớ dựa trên “trường hợp xấu nhất”. Ví dụ: các bảng bộ nhớ luôn sử dụng các cột có độ dài cố định, vì vậy VARCHAR(255) được sử dụng cho các cột char. Điều này có thể làm cho các bảng tạm thời trong bộ nhớ lớn hơn nhiều so với bạn nghĩ - trên thực tế, lớn hơn nhiều lần so với tổng kích thước của bảng đang được truy vấn. Khi tăng kích thước của các biến max_heap_table_size và tmp_table_size, hãy nhớ theo dõi mức sử dụng bộ nhớ của máy chủ vì các bảng tạm thời trong bộ nhớ có thể làm tăng nguy cơ đạt đến dung lượng bộ nhớ của máy chủ

Nói chung, 32 triệu đến 64 triệu là giá trị được đề xuất để bắt đầu cho cả hai biến và điều chỉnh khi cần

Màn hình bảng tạm thời trong Monyog

Màn hình bảng tạm thời là một trong nhiều màn hình Monyog được xác định trước. Nó cung cấp một số số liệu về việc sử dụng bảng tạm thời bao gồm

  • Kích thước tối đa cho phép.
    Hiển thị giá trị của biến máy chủ tmp_table_size, xác định kích thước tối đa của các bảng tạm thời được tạo trong bộ nhớ. Cùng với max_heap_table_size, kích thước này xác định kích thước tối đa của bảng nội bộ có thể được tạo trong bộ nhớ. Nếu một bảng nội bộ lớn hơn kích thước này, nó sẽ được lưu trữ trên đĩa.
  • Kích thước tối đa của bảng bộ nhớ.
    Hiển thị giá trị của biến máy chủ max_heap_table_size, xác định kích thước tối đa của bảng công cụ lưu trữ BỘ NHỚ được tạo rõ ràng.
  • Tổng số bảng đã tạo.
    Hiển thị giá trị của biến máy chủ created_tmp_tables, xác định số lượng bảng tạm thời được tạo trong bộ nhớ.
  • Được tạo trên đĩa.
    Hiển thị giá trị của biến máy chủ created_tmp_disk_tables, xác định số lượng bảng tạm thời được tạo trên đĩa.
    Nếu giá trị này cao, bạn nên cân nhắc tăng giá trị của tmp_table_size và max_heap_table_size.
  • Đĩa. tổng tỷ lệ.
    Một giá trị được tính toán dựa trên created_tmp_disk_tables chia cho created_tmp_tables.
    Tỷ lệ phần trăm bảng tạm thời được tạo trên đĩa do không đủ tmp_table_size hoặc max_heap_table_size. Monyog trình bày con số này dưới dạng thanh tiến trình và tỷ lệ phần trăm để nhanh chóng xác định lượng đĩa đang được sử dụng cho các bảng tạm thời, trái ngược với bộ nhớ.

Kích thước bảng heap tối đa mysql

Biểu đồ xu hướng có sẵn cho Tổng số bảng đã tạo, Đã tạo trên đĩa và Đĩa. tổng giá trị tỷ lệ. Những điều này cho phép chúng ta thấy sự tiến hóa của chúng theo thời gian

Kích thước bảng heap tối đa mysql

Mẹo số 3. Tăng kích thước bộ đệm chủ đề

Các luồng của trình quản lý kết nối xử lý các yêu cầu kết nối của máy khách trên các giao diện mạng mà máy chủ lắng nghe. Các luồng của trình quản lý kết nối liên kết từng kết nối máy khách với một luồng dành riêng cho nó để xử lý xác thực và xử lý tất cả các yêu cầu cho kết nối đó. Do đó, có một tỷ lệ một đối một giữa các luồng và các máy khách hiện được kết nối. Điều quan trọng là đảm bảo rằng bộ đệm luồng đủ lớn để chứa tất cả các yêu cầu đến

MySQL cung cấp một số biến máy chủ liên quan đến chuỗi kết nối

Kích thước bộ đệm luồng được xác định bởi biến hệ thống thread_cache_size. Giá trị mặc định là 0 (không có bộ nhớ đệm), điều này khiến một luồng được thiết lập cho mỗi kết nối mới và bị loại bỏ khi kết nối kết thúc. Nếu bạn muốn máy chủ của mình nhận được hàng trăm yêu cầu kết nối mỗi giây, bạn nên đặt thread_cache_size đủ cao để hầu hết các kết nối mới đều sử dụng các chuỗi được lưu trong bộ nhớ cache. Bạn có thể đặt max_connections khi khởi động máy chủ hoặc khi chạy

Bạn cũng nên theo dõi số lượng luồng trong bộ đệm (Threads_cached) và có bao nhiêu luồng đã được tạo do không thể lấy luồng từ bộ đệm (Threads_created). Về vấn đề thứ hai, nếu Threads_created tiếp tục tăng với tốc độ nhiều hơn một vài luồng mỗi phút, hãy xem xét tăng giá trị của thread_cache_size

Sử dụng lệnh hiển thị trạng thái MySQL để hiển thị các biến MySQL và thông tin trạng thái. Dưới đây là một vài ví dụ

SHOW GLOBAL STATUS LIKE '%Threads_connected%';

+-------------------+-------+

| Variable_name     | Value |

+-------------------+-------+

| Threads_connected | 2     |

+-------------------+-------+

SHOW GLOBAL STATUS LIKE '%Threads_running%';

+-----------------+-------+

| Variable_name   | Value |

+-----------------+-------+

| Threads_running | 1     |

+-----------------+-------+

Giám sát bộ đệm chủ đề Monyog

Monyog cung cấp một màn hình để theo dõi Thread Caching có tên là “Threads”. Các biến máy chủ liên quan đến chuỗi MySQL ánh xạ tới các số liệu Monyog sau

  • thread_cache_size. Số lượng chủ đề có thể được lưu trữ
  • Threads_cached. Số lượng chủ đề trong bộ đệm
  • Threads_created. Chủ đề được tạo để xử lý các kết nối

Màn hình Chủ đề Monyog cũng bao gồm chỉ số "Tốc độ truy cập bộ nhớ cache của chủ đề". Đó là một phân số đưa ra dấu hiệu về tỷ lệ trúng bộ nhớ cache của luồng. Nếu giá trị thấp, bạn nên xem xét tăng bộ đệm luồng. Thanh trạng thái hiển thị giá trị này dưới dạng phần trăm;

Mỗi chỉ số này có thể được định cấu hình để gửi cảnh báo và/hoặc cảnh báo quan trọng nếu giá trị của chúng bằng hoặc vượt quá giá trị đã chỉ định

Kích thước bảng heap tối đa mysql

Các biến máy chủ có liên quan khác

Ngoài các số liệu trên, bạn cũng nên theo dõi những điều sau đây

  1. Kích thước nhóm bộ đệm InnoDB.
    Kích thước nhóm bộ đệm InnoDB đóng vai trò chính trong cơ sở dữ liệu MySQL sử dụng InnoDB. Vùng đệm lưu trữ cả dữ liệu và chỉ mục. Nó phải được đặt càng lớn càng tốt để đảm bảo rằng cơ sở dữ liệu của bạn sử dụng bộ nhớ chứ không phải ổ cứng cho các thao tác đọc.
  2. Kích thước bảng tạm thời
  3. MySQL sử dụng giá trị thấp hơn của max_heap_table_size và tmp_table_size để giới hạn kích thước của các bảng tạm thời trong bộ nhớ. Có một giá trị lớn có thể giúp giảm số lượng bảng tạm thời được tạo trên đĩa, nhưng cũng làm tăng nguy cơ đạt đến dung lượng bộ nhớ của máy chủ vì chỉ số này áp dụng cho từng máy khách. Nói chung, 32 triệu đến 64 triệu là giá trị được đề xuất để bắt đầu cho cả hai biến và điều chỉnh khi cần

  4. Kích thước bộ đệm nhật ký InnoDB
  5. Mỗi khi MySQL ghi vào tệp nhật ký, nó sẽ sử dụng các tài nguyên hệ thống quan trọng có thể được dùng để xử lý doanh số bán hàng. Do đó, chỉ nên đặt kích thước bộ đệm nhật ký InnoDB thành một giá trị lớn. Bằng cách đó, máy chủ ghi vào đĩa ít thường xuyên hơn trong các giao dịch lớn, do đó giảm thiểu các thao tác tốn thời gian đó. 64M là điểm khởi đầu tốt cho biến này

Phần kết luận

Mặc dù ngay cả các trang web của các tập đoàn lớn nhất cũng phải chịu lỗ do ngừng hoạt động theo thời gian, nhưng tác động này đặc biệt nghiêm trọng đối với các ngành công nghiệp nhỏ, vừa và gia đình xử lý việc bán hàng trực tuyến. Theo một báo cáo về cuộc khảo sát gần đây, một phút mất điện dẫn đến thiệt hại trung bình khoảng 5000 đô la cho các công ty. Đừng để doanh nghiệp của bạn trở thành một phần của thống kê đó. Hãy chủ động điều chỉnh (các) máy chủ cơ sở dữ liệu MySQL của bạn trước kỳ nghỉ lễ gấp rút và gặt hái những phần thưởng.

Max_heap_table_size được đề xuất trong MySQL là gì?

32M đến 64M là giá trị ban đầu thường được đề xuất để đặt tmp_table_size và max_heap_table_size. Điều quan trọng cần lưu ý là MySQL sẽ lấy THẤP HƠN trong hai giá trị được gán cho các biến này. Khi chọn một giá trị cho max_heap_table_size, hãy dự đoán kích thước tối đa dự kiến ​​cho bảng công cụ lưu trữ bộ nhớ.

Kích thước tối đa của bảng trong MySQL là bao nhiêu?

Bạn đang sử dụng bảng MyISAM và không gian cần thiết cho bảng vượt quá kích thước con trỏ bên trong cho phép. MyISAM cho phép các tệp chỉ mục và dữ liệu tăng lên tới 256TB theo mặc định nhưng giới hạn này có thể được thay đổi tới kích thước tối đa cho phép là 65.536TB (2567 − .

Làm cách nào để kiểm tra max_heap_table_size?

Trước tiên, hãy kiểm tra giá trị của max_heap_table_size, tính bằng byte. SET @@@@max_heap_table_size=yourNumberOfBytes . Hãy để chúng tôi thay đổi giá trị max_heap_table_size. Số byte là 33554432, tương đương với 32 MB.

Giá trị được đề xuất cho max_heap_table_size là gì?

32M đến 64M là giá trị ban đầu thường được đề xuất để đặt tmp_table_size và max_heap_table_size