Trang này được dịch bằng máy. Đọc bản gốc tiếng Anh. English

Thư viện IBSurgeon

FirebirdSQL: tệp nội bộ, tệp tạm thời và biến môi trường

bởi Vasily Sidorov, 2 tháng 9, 2022, IBSurgeon

Các DBA Firebird có kinh nghiệm biết rằng Firebird có thể yêu cầu dung lượng đĩa khá lớn để lưu trữ các tệp nội bộ và tạm thời. Kích thước khuyến nghị của dung lượng đĩa cho các tệp tạm thời trong hệ thống sản xuất là 30-40 Gb, nhưng đối với các hệ thống tải cao, con số này có thể lớn hơn.

Trong bài viết này, chúng tôi sẽ mô tả các loại tệp nội bộ và tạm thời của Firebird, đồng thời xem xét cách chúng được lưu trữ và quản lý thông qua các tham số cấu hình và biến môi trường của hệ điều hành. Bài viết tiếp nối chuỗi bài viết và tài liệu dành cho việc làm chủ cài đặt và cấu hình của Firebird.

Lưu ý quan trọng từ các nhà phát triển lõi Firebird:

Không bao giờ, không bao giờ, KHÔNG BAO GIỜ đặt/thay đổi biến môi trường FIREBIRD_LOCK - trừ khi bạn BIẾT RẤT RÕ mình đang làm gì.

Đề xuất rõ ràng từ nhóm IBSurgeon:

Đừng thay đổi FIREBIRD_LOCK.

Đối với các tệp tạm thời khác - xem bài này.

Các tệp nội bộ trong Firebird

Các tệp nội bộ là các tệp được Firebird sử dụng để thực hiện các hoạt động nội bộ của nó. Các tệp này không nên được thay đổi hoặc chạm vào bởi người dùng hoặc phần mềm bên thứ ba. Thông tin dưới đây chỉ mang tính tham khảo.

Mẫu đặt tên chung của các tệp nội bộ

Firebird sử dụng tiền tố nội bộ fbNN_, trong đó NN có thể là

  • Số ODS (Cấu trúc trên đĩa) chính (ODS 12 cho Firebird 3.0, ODS 13 cho Firebird 4.0), tức là tệp bắt đầu bằng fb13.
  • NN có thể là số phiên bản rút gọn - ví dụ: tệp có thể bắt đầu bằng fb50.

Ngoài ra, có thể có tiền tố fb_, cũng được sử dụng cho các tệp tạm thời.

Các loại tệp nội bộ trong Firebird

Có các loại tệp nội bộ chính sau trong Firebird:

  1. fb_lock_ - các tệp khóa - tệp được sử dụng bởi trình quản lý khóa của Firebird
  2. fbNN_monitor_ - tệp với dữ liệu của các bảng giám sát
  3. fbNN_trace_ - tệp với dữ liệu cho các phiên theo dõi
  4. fb_event_ - tệp với bộ đệm lưu trữ các sự kiện
  5. fb_user_mapping - tệp với dữ liệu ánh xạ người dùng
  6. tệp với dữ liệu nội bộ cho các phiên theo dõi
  7. tệp cờ (kích thước bằng không)
  8. fb_repl_ - tệp sao chép

Hãy xem xét chi tiết các tệp nội bộ của Firebird.

Tệp khóa

Các tệp khóa có tiền tố fb_lock_. Chúng được sử dụng bởi trình quản lý khóa của Firebird để đồng bộ hóa quyền truy cập vào các đối tượng bên trong cơ sở dữ liệu Firebird và giữa các phiên bản Firebird.

Các tệp khóa được tạo khi mở tệp cơ sở dữ liệu và bị xóa khi đóng.

Theo mặc định, tệp cơ sở dữ liệu được đóng khi kết nối cuối cùng bị ngắt. Bắt đầu từ Firebird 3.0, có thể giữ tệp cơ sở dữ liệu mở trong Firebird sau khi ngắt kết nối cuối cùng bằng tùy chọn LINGER.

Kích thước ban đầu của tệp khóa được đặt bởi tham số LockMemSize trong firebird.conf. Kích thước hoạt động khác nhau tùy thuộc vào kiến trúc: SuperServer sử dụng tệp khóa ít chuyên sâu hơn Classic và SuperClassic. Kích thước bảng khóa điển hình khoảng 30-50Mb, nhưng đối với các máy chủ có hàng nghìn kết nối trong Classic/SuperClassic, kích thước của tệp khóa có thể tăng lên tới 2Gb. 2Gb là giới hạn triển khai cho các tệp khóa trong Firebird vanilla.

Tệp với dữ liệu từ các bảng giám sát

Bắt đầu từ phiên bản 2.1, Firebird có các bảng giám sát. Các bảng này không được lưu trữ bên trong cơ sở dữ liệu, dữ liệu giám sát được thu thập theo yêu cầu và được giữ trong các tệp nội bộ với mẫu tên fbNN_monitor_.

Kích thước của các tệp với dữ liệu bảng giám sát phụ thuộc vào số lượng kết nối và hoạt động của chúng (giao dịch, câu lệnh, thủ tục lưu trữ, v.v.). Ngoài ra, số lượng và kích thước của các tệp fb_NN_monitor_ phụ thuộc vào số lượng yêu cầu đến các bảng giám sát từ các kết nối khác nhau (đây là một trong những lý do tại sao bạn không nên sử dụng các bảng MON$ cho các tác vụ không phải giám sát).

Tệp với dữ liệu cho các phiên theo dõi

Mẫu tên tệp fbNN_trace_ giữ liên kết đến tệp phiên theo dõi đang hoạt động. Các tệp với mẫu tên fb_trace_ chứa thông tin về phiên theo dõi. Đây là một loại bộ đệm cho dữ liệu theo dõi. Kích thước tối đa của tệp fb_trace bị giới hạn bởi tham số MaxUserTraceLogSize trong firebird.conf. Nếu bộ đệm này bị đầy, quá trình theo dõi sẽ tự động tạm dừng.

Tệp cho bộ đệm sự kiện

Các tệp với mẫu tên fb_event_ là các bộ đệm nơi Firebird lưu trữ các sự kiện chưa được gửi đến các ứng dụng khách.

Tệp với dữ liệu ánh xạ người dùng

Các tệp fb_user_mapping được sử dụng để lưu vào bộ nhớ đệm ánh xạ người dùng trong các phiên bản Firebird.

Tệp cờ

Trong POSIX, Firebird sử dụng các tệp cờ có kích thước bằng không - fb_guard, fb_init, fb_port_NUMBER. Các tệp này được sử dụng khi khởi động Firebird.

Tệp sao chép

Trong Firebird 4 và HQbird, các tệp fb_repl_ chứa dữ liệu nội bộ cho các quá trình sao chép.

Vị trí của các tệp nội bộ

Theo mặc định, tất cả các tệp nội bộ của Firebird được lưu trữ trong cùng một thư mục: trên Windows là C:\ProgramData\firebird, trên Linux - /tmp/firebird. Xin lưu ý rằng thư mục phải có đủ quyền hạn để phiên bản Firebird có thể tạo và làm việc với các tệp ở đó!

Có thể thay đổi vị trí của thư mục chứa các tệp nội bộ của Firebird bằng cách xác định biến môi trường FIREBIRD_LOCK, nhưng chúng tôi không khuyến nghị điều này.

XIN LƯU Ý: để tránh hỏng cơ sở dữ liệu, tất cả các quá trình Firebird mở cùng một tệp cơ sở dữ liệu nên làm việc với cùng một FIREBIRD_LOCK. Vui lòng không tạo biến này và sử dụng các vị trí mặc định.

Kích thước của các tệp nội bộ

Trên thực tế, tổng kích thước của các tệp nội bộ Firebird khoảng 100-200Mb, tối đa được biết đến là 2Gb.

Các tệp tạm thời trong Firebird

Các tệp tạm thời được tạo bởi công cụ Firebird để lưu trữ dữ liệu tạm thời phát sinh từ các hoạt động của người dùng - ví dụ như các truy vấn với DISTINCT. Các tệp tạm thời có thể rất lớn trong các hệ thống sản xuất tải cao, vì vậy cần thiết cho DBA có kinh nghiệm để có thể nhận biết các loại tệp tạm thời và, nếu cần, điều chỉnh cấu hình Firebird hoặc phân bổ dung lượng đĩa để lưu trữ các tệp tạm thời.

Vị trí của các tệp tạm thời trong Firebird

Firebird tạo các tệp tạm thời trong thư mục được chỉ định bởi các biến môi trường FIREBIRD_TMP, TEMP, TMP (theo thứ tự này). Nếu không có các biến như vậy, các tệp tạm thời sẽ được tạo trong C:\Temp trên Windows hoặc /tmp trên Linux.

Trên thực tế, trên Windows chúng ta có thể thấy các tệp tạm thời của Firebird trong C:\Windows\Temp (tương ứng với biến môi trường TEMP), trên Linux trong /tmp.

Các loại tệp tạm thời trong Firebird

Có các tệp tạm thời sau (tất cả đều sử dụng tiền tố fb_):

  1. fb_table_ - các đối tượng bảng, bao gồm nhưng không giới hạn ở các bảng tạm thời
  2. fb_blob_ - các blob và giao dịch tự trị
  3. fb_undo_ - dữ liệu hoàn tác
  4. fb_recbuf_ - được sử dụng để giữ dữ liệu trung gian trong các truy vấn đang hoạt động, bảng ảo, v.v.
  5. fb_merge_ - dữ liệu cho các phép nối băm
  6. fb_sort_ - sắp xếp (cho các truy vấn với DISTINCT/ORDER BY/GROUP BY và để tạo/tái tạo chỉ mục)
  7. fb_tpc_ - dữ liệu fb_tpc_ - từ v4, danh sách tất cả các giao dịch đã biết với số cam kết liên quan
  8. fb_snap_ - dữ liệu cho - từ v4, danh sách tất cả các ảnh chụp cơ sở dữ liệu đang hoạt động

Làm thế nào để thay đổi vị trí của các tệp tạm thời?

Đối với các phiên bản Firebird trước 4, có thể xác định thư mục cụ thể để lưu trữ các tệp tạm thời loại 4-8 với tham số cấu hình TempDirectories của Firebird.

Đối với Firebird 4 trở lên, tham số cấu hình mới TempTableDirectory cho phép chỉ định thư mục để lưu trữ các bảng tạm thời loại 1-3. Nó có thể được đặt trong firebird.conf và databases.conf.

Các biến môi trường cho Firebird

Firebird có thể sử dụng các biến môi trường hệ điều hành sau (nếu chúng được xác định):

  • FIREBIRD - thư mục chứa các tệp cấu hình Firebird
  • FIREBIRD_LOCK - thư mục chứa các tệp nội bộ
  • FIREBIRD_MSG - thư mục chứa tệp thông báo (firebird.msg)
  • FIREBIRD_TMP - thư mục cho các tệp tạm thời

Trên thực tế, FIREBIRD_TMP là biến duy nhất có ý nghĩa để xác định nếu bạn có lý do lớn để lưu trữ các tệp tạm thời ở vị trí không mặc định cụ thể.

Xin lưu ý rằng nếu đường dẫn trong FIREBIRD_TMP không hợp lệ (không tồn tại hoặc không đủ quyền), nó sẽ dẫn đến các lỗi nghiêm trọng ngăn Firebird hoạt động.

Lưu ý quan trọng từ các nhà phát triển lõi Firebird:

Không bao giờ, không bao giờ, KHÔNG BAO GIỜ đặt/thay đổi biến môi trường FIREBIRD_LOCK - trừ khi bạn BIẾT RẤT RÕ mình đang làm gì.

Đề xuất rõ ràng từ nhóm IBSurgeon:

Không bao giờ thay đổi FIREBIRD_LOCK. Thông tin này chỉ mang tính tham khảo.

Đối với các tệp tạm thời khác - xem bài này.

Thay cho Tóm tắt: câu trả lời cho câu hỏi rất thường gặp

Nhiều DBA hỏi - chúng ta có nên sử dụng ổ RAM hoặc tmpfs để lưu trữ các tệp nội bộ và/hoặc tạm thời của Firebird không?

Câu trả lời ngắn gọn là: Không, tốt hơn nên điều chỉnh cấu hình Firebird. Nếu bạn có nhiều bộ nhớ, bạn có thể tăng giá trị cho DefaultDBCachePages (chỉ dành cho SuperServer) và tăng TempCacheLimit (trong các phiên bản 3+ Firebird cho phép sử dụng TempCacheLimit lớn hơn 2Gb).

Nếu bạn không chắc chắn nên sử dụng giá trị nào, vui lòng sử dụng Máy tính cấu hình Firebird, công cụ này tạo ra các cấu hình tối ưu và an toàn cho các tham số phần cứng/VM cụ thể.

Câu trả lời dài hơn: Firebird được thiết kế để giữ phần lớn các tệp tạm thời và nội bộ trong bộ nhớ, nhưng, vì trên thực tế có những tình huống các đối tượng tạm thời trở nên rất lớn, nó cũng có cơ chế lưu trữ chúng trên đĩa. Firebird sử dụng hiệu quả các cơ chế của hệ điều hành (mmap, bộ nhớ đệm hệ thống tệp, tệp tạm thời, v.v.) để lưu vào bộ nhớ đệm các tệp tạm thời và nội bộ khi có thể và hợp lý. Việc điều chỉnh Firebird nên được thực hiện thông qua cấu hình Firebird trước, sau đó đến hệ điều hành (đặt vị trí của các tệp tạm thời, các tùy chọn khác nhau để điều chỉnh bộ nhớ đệm tệp, v.v.).

Các liên kết liên quan

Video:

Bài thuyết trình về điều chỉnh sử dụng bộ nhớ

Vui lòng thoải mái đặt câu hỏi hoặc gửi phản hồi đến [email protected]