Hàm quản trị hệ thống

Một phần của tài liệu Tài liệu quản trị postgresql (Trang 272 - 278)

Chương 9. Hàm và toán tử

9.24. Hàm quản trị hệ thống

Bảng 9-54 chỉ ra các hàm sẵn sàng để truy vấn và tùy biến các tham số cấu hình theo thời gian chạy.

(run-time).

Bảng 9-54. Các hàm thiết lập cấu hình

Tên Dạng trả về Mô tả

current_setting(setting_name) text có giá trị của thiết lập hiện hành set_config(setting_name, new_value, is_local) text thiết lập tham số và trả về giá trị mới

Hàm current_setting có giá trị hiện hành của thiết lập setting_name. Nó tương ứng với lệnh SQL

SHOW. Một ví dụ:

SELECT current_setting(’datestyle’);

current_setting --- ISO, MDY (1 row)

set_config thiết lập tham số setting_name cho new_value. Nếu is_local là true, thì giá trị mới đó sẽ chỉ áp dụng cho giao dịch hiện hành. Nếu bạn muốn giá trị mới đó áp dụng cho phiên hiện hành, hãy sử dụng false thay vào đó. Hàm đó tương ứng với lệnh SQL SET. Một ví dụ:

SELECT set_config(’log_statement_stats’, ’off’, false);

set_config --- off (1 row)

Hàm đó được chỉ ra trong Bảng 9-55 gửi đi các tín hiệu kiểm soát cho các tiến trình khác của máy chủ. Sử dụng các hàm đó bị hạn chế chỉ cho các siêu người sử dụng.

Bảng 9-55. Các hàm đánh tín hiệu cho máy chủ

Tên Dạng trả về Mô tả

pg_cancel_backend(pid int) boolean Hoãn một truy vấn hiện hành ở phần phụ trợ (backend) pg_terminate_backend(pid int) boolean Kết thúc một phần phụ trợ

pg_reload_conf() boolean Làm cho các tiến trình máy chủ tải lại các tệp cấu hình của chúng.

pg_rotate_logfile() boolean Xoay tệp lưu ký của máy chủ

Từng trong số các hàm đó trả về true nếu thành công và false nếu là khác.

pg_cancel_backend và pg_terminate_backend gửi các tín hiệu (SIGINT hoặc SIGTERM một cách tương ứng) tới các tiến trình phần phụ trợ (backend) được ID tiến trình xác định. ID tiến trình của một phần phụ trợ tích cực có thể thấy từ cột procpid của kiểu nhìn pg_stat_activity, hoặc bằng việc liệt kê các tiến trình postgres trên máy chủ (bằng việc sử dụng ps trên Unix hoặc Task Manager - Trình quản lý tác vụ trên Windows).

pg_reload_conf gửi một tín hiệu SIGHUP tới máy chủ, làm cho các tệp cấu hình sẽ được tất cả các tiến trình của máy chủ tải lại.

pg_rotate_logfile đánh tín hiệu cho trình quản lý tệp lưu ký để chuyển tới một tệp đầu ra mới ngay lập tức. Điều này chỉ làm việc khi bộ thu thập lưu ký được xây dựng sẵn rồi đang chạy, vì nếu khác thì sẽ không có các tiến trình con quản lý tệp lưu ký.

Các hàm được chỉ ra trong Bảng 9-56 hỗ trợ trong việc tiến hành các sao lưu trực tuyến. Các hàm đó không thể được thực thi trong quá trình phục hồi. Sử dụng 3 hàm đầu tiên bị hạn chế chỉ cho các siêu người sử dụng (superusers).

Bảng 9-56. Các hàm kiểm soát sao lưu

Tên Dạng trả về Mô tả

pg_start_backup(label text [, fast

boolean ]) text Chuẩn bị cho việc thực thi sao lưu trực tuyến pg_stop_backup() text Kết thúc việc thực thi sao lưu trực tuyến pg_switch_xlog() text Ép chuyển sang một tệp lưu ký giao dịch mới pg_current_xlog_location() text Có vị trí viết lưu ký giao dịch hiện hành pg_current_xlog_insert_location() text Có vị trí chèn lưu ký giao dịch hiện hành

pg_xlogfile_name_offset(location text) text, integer Biến đổi chuỗi vị trí lưu ký giao dịch thành tên tệp và phần bù thập phân byte trong tệp

pg_xlogfile_name(location text) text Biến đổi chuỗi vị trí lưu ký thành tên tệp

pg_start_backup chấp nhận một nhãn tùy ý do người sử dụng định nghĩa cho sao lưu. (Thường thì điều này có thể là tên theo đó tệp dump sao lưu sẽ được lưu trữ). Hàm đó viết một tệp nhãn sao lưu (backup_label) vào thư mục dữ liệu của bó cơ sở dữ liệu đó, thực thi một điểm kiểm tra, và sau đó trả về cho việc khởi đầu sao lưu vị trí lưu ký giao dịch như là văn bản. Người sử dụng có thể bỏ qua

giá trị kết quả này, nhưng nó được cung cấp trong trường hợp điều đó là hữu dụng.

postgres=# select pg_start_backup(’label_goes_here’);

pg_start_backup --- 0/D4445B8 (1 row)

Có một tham số lựa chọn thứ 2 dạng boolean. Nếu true, nó chỉ định việc thực thi pg_start_backup

càng nhanh càng tốt. Điều này ép một điểm kiểm tra ngay lập tức mà sẽ gây ra một sự tăng đột biến trong các hoạt động I/O, làm chậm lại bất kỳ truy vấn đang đồng thời thực thi nào.

pg_stop_backup loại bỏ tệp nhãn được pg_start_backup tạo ra, và tạo ra một tệp lịch sử sao lưu trong khu vực lưu trữ lưu ký giao dịch. Tệp lịch sử đó bao gồm nhãn được đưa ra cho pg_start_backup, các vị trí bắt đầu và kết thúc lưu ký giao dịch để sao lưu, và thời điểm bắt đầu và kết thúc sự sao lưu đó.

Giá trị trả về là vị trí lưu ký giao dịch kết thúc của sự sao lưu đó (nó một lần nữa có thể bị bỏ qua).

Sau việc ghi lại vị trí kết thúc, điểm chèn lưu ký giao dịch hiện hành được tự động tiến đến tệp lưu ký giao dịch tiếp sau, sao cho tệp lưu ký giao dịch kết thúc có thể được lưu trữ ngay lập tức để hoàn tất sao lưu.

pg_switch_xlog chuyển sang tệp lưu ký giao dịch tiếp sau, cho phép tệp hiện hành sẽ được lưu trữ (giả thiết bạn đang sử dụng việc lưu trữ liên tục). Giá trị trả về là vị trí lưu ký giao dịch kết thúc +1 bên trong tệp lưu ký giao dịch vừa được hoàn tất. Nếu chưa từng có hoạt động lưu ký giao dịch nào kể từ sự chuyển lưu ký giao dịch cuối cùng, thì pg_switch_xlog không làm gì cả và trả về vị trí ban đầu tệp lưu ký giao dịch hiện đang được sử dụng.

pg_current_xlog_location hiển thị vị trí ghi lưu ký giao dịch hiện hành trong cùng một định dạng được các hàm ở trên sử dụng. Tương tự, pg_current_xlog_insert_location hiển thị điểm chèn lưu ký giao dịch hiện hành. Điểm chèn đó là kết thúc “logic” của lưu ký giao dịch trong bất kỳ sự kiện nào, trong khi vị trí ghi là kết thúc của những gì thực sự từng được ghi ra từ bộ nhớ đệm (buffer) nội bộ của máy chủ, và thường là những gì bạn muốn nếu bạn có quan tâm trong việc lưu trữ các tệp lưu ký giao dịch được hoàn tất một phần. Điểm chèn được làm cho sẵn sàng trước hết cho các mục đích gỡ lỗi của máy chủ. Chúng là cả các hoạt động chỉ đọc và không đòi hỏi các quyền của siêu người sử dụng.

Bạn có thể sử dụng pg_xlogfile_name_offset để trích tên và phần bù theo byte các tệp lưu ký giao dịch tương ứng từ các kết quả của bất kỳ hàm nào ở trên. Ví dụ:

postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());

file_name | file_offset

---+---

00000001000000000000000D | 4039624 (1 row)

Tương tự, pg_xlogfile_name trích chỉ tên tệp lưu ký giao dịch. Khi vị trí lưu ký giao dịch được đưa ra chính xác trong một giới hạn tệp lưu ký giao dịch, thì cả các hàm đó đều trả về tên của tệp lưu ký giao dịch trước đó. Điều này thường là hành vi được mong muốn cho việc quản lý hành vi lưu trữ lưu ký giao dịch, vì tệp trước đó là tệp cuối cùng mà hiện hành cần phải được lưu trữ.

Để có các chi tiết về sử dụng đúng các hàm đó, xem Phần 24.3.

Các hàm được chỉ ra trong Bảng 9-57 đưa ra thông tin về hiện trạng của chế độ chờ. Các hàm đó có thể được thực thi trong quá trình phục hồi và trong khi chạy bình thường.

Bảng 9-57. Các hàm thông tin phục hồi

Tên Dạng trả về Mô tả

pg_is_in_recovery() bool True nếu phục hồi vẫn còn đang diễn ra.

pg_last_xlog_receiv

e_location() text Có vị trí lưu ký giao dịch mới nhất nhận được và được đồng bộ vào đĩa bằng nhân bản luồng. Trong khi sự nhân bản luồng đang diễn ra thì điều này sẽ làm gia tăng một cách đơn điệu. Nhưng khi sự nhân bản luồng được khởi động lại thì điều này sẽ quay trở lại với vị trí bắt đầu nhân bản, thường là bắt đầu tệp WAL có chứa vị trí chơi lại hiện hành. Nếu sự phục hồi đã hoàn tất thì điều này sẽ vẫn là tĩnh trong giá trị của bản ghi WAL mới nhất được nhận và được đồng bộ vào đĩa trong quá trình phục hồi. Nếu nhân bản luồng bị vô hiệu hóa, hoặc nếu nó còn chưa bắt đầu, thì hàm đó trả về NULL.

pg_last_xlog_replay

_location() text Có vị trí lưu ký giao dịch được chơi lại trong quá trình phục hồi. Nếu sự phục hồi vẫn còn diễn ra thì điều này sẽ làm gia tăng một cách đơn điệu. Nếu sự phục hồi đã hoàn tất thì giá trị này vẫn giữ là tĩnh trong giá trị của bản ghi WAL mới nhất được áp dụng trong quá trình phục hồi đó. Khi máy chủ đã được khởi tạo bình thường mà không có phục hồi thì hàm đó trả về NULL.

Các hàm được chỉ ra trong Bảng 9-58 tính sử dụng không gian đĩa của các đối tượng cơ sở dữ liệu.

Bảng 9-58. Các hàm kích thước đối tượng cơ sở dữ liệu

Tên Dạng trả về Mô tả

pg_column_size(any) int Số byte được sử dụng để lưu trữ một giá trị đặc biệt (có thể được nén) pg_total_relation_size(regclass) bigint Tổng không gian đĩa được bảng sử dụng với OID hoặc tên được chỉ

định, bao gồm tất cả các chỉ số và dữ liệu TOAST

pg_table_size(regclass) bigint Không gian đĩa được bảng sử dụng với OID hoặc tên được chỉ định, ngoại trừ các chỉ số (nhưng bao gồm TOAST, bản đồ không gian tự do, và bản đồ nhìn thấy được)

pg_indexes_size(regclass) bigint Tổng không gian đĩa được các chỉ số sử dụng được gắn vào bảng với OID hoặc tên được chỉ định

pg_database_size(oid) bigint Không gian đĩa được cơ sở dữ liệu sử dụng với OID được chỉ định pg_database_size(name) bigint Không gian đĩa được cơ sở dữ liệu sử dụng với OID được chỉ định pg_tablespace_size(oid) bigint Không gian đĩa được cơ sở dữ liệu sử dụng với OID được chỉ định pg_tablespace_size(name) bigint Không gian đĩa được cơ sở dữ liệu sử dụng với OID được chỉ định pg_relation_size(relation

regclass, fork text) bigint Không gian đĩa được bảng rẽ nhánh chỉ định (’main’, ’fsm’ or ’vm’) hoặc chỉ số với OID hoặc tên được chỉ định

pg_relation_size(relation

regclass) bigint Viết tắt cho pg_relation_size(..., ’main’)

pg_size_pretty(bigint) text Biến đổi một kích thước dạng byte thành một định dạng người đọc được với các đơn vị của kích thước

pg_column_size chỉ ra không gian được sử dụng để lưu trữ bất kỳ giá trị dữ liệu riêng rẽ nào.

pg_total_relation_size chấp nhận OID hoặc tên của một bảng hoặc bảng toast, và trả về tổng không gian trên đĩa được sử dụng cho bảng đó, bao gồm tất cả các chỉ số có liên quan. Hàm này là tương đương với pg_table_size + pg_indexes_size.

pg_table_size chấp nhận OID hoặc tên của một bảng và trả về không gian đĩa cần thiết cho bảng đó, ngoại trừ các chỉ số. (Không gian TOAST, bản đồ không gian tự do, và bản đồ trực quan bao gồm).

pg_indexes_size chấp nhận OID hoặc tên của một bảng và trả về tổng không gian đĩa được tất cả các chỉ số sử dụng được gắn tới bảng đó.

pg_database_size và pg_tablespace_size chấp nhận OID hoặc tên của một bảng hoặc không gian bảng, và trả về tổng không gian đĩa được sử dụng ở trong đó.

pg_relation_size chấp nhận OID hoặc tên của một bảng, chỉ số hoặc bảng toast, và trả về kích cỡ trên đĩa theo các byte. Việc chỉ định ’main’ hoặc để ra đối số thứ 2 trả về kích cỡ của rẽ nhánh dữ liệu chính của quan hệ đó. Việc chỉ định ’fsm’ trả về kích cỡ của Bản đồ Không gian Tự do (xem Phần 54.3) có liên quan tới quan hệ này. Việc chỉ định ’vm’ trả về kích cỡ của Bản đồ Trực quan (xem Phần 54.4) có liên quan tới quan hệ này. Lưu ý rằng hàm này chỉ ra kích cỡ của chỉ một rẽ nhánh; vì hầu hết các mục đích là thuận tiện hơn để sử dụng các hàm mức cao hơn pg_total_relation_size hoặc

pg_table_size.

pg_size_pretty có thể được sử dụng để định dạng kết quả của một trong các hàm khác theo cách con người có thể đọc được, bằng việc sử dụng kB, MB, GB hoặc TB một cách phù hợp.

Các hàm được chỉ ra trong Bảng 9-59 hỗ trợ trong việc nhận diện các tệp đĩa đặc thù có liên quan tới các đối tượng cơ sở dữ liệu.

Bảng 9-59. Các hàm vị trí đối tượng cơ sở dữ liệu

Tên Dạng trả về Mô tả

pg_relation_filenode(relation regclass) oid Số nút tệp của quan hệ với OID hoặc tên được chỉ định pg_relation_filepath(relation regclass) text Tên đường dẫn tệp của quan hệ với OID hoặc tên được chỉ định

pg_relation_filenode chấp nhận OID hoặc tên của một bảng, chỉ số, sự tuần tự hoặc bảng toast, và trả về số “nút tệp” (filenode) hiện được chỉ định cho nó. Nút tệp là thành phần cơ bản của (các) tên tệp được sử dụng cho quan hệ đó (xem Phần 54.l để có thêm thông tin). Đối với hầu hết các bảng thì kết quả là y hệt như pg_class .relfilenode, nhưng đối với các catalog hệ thống nhất định thì relfilenode

là 0 và hàm này phải được sử dụng để có giá trị đúng. Hàm đó trả về NULL nếu đã truyền một quan hệ mà không có lưu trữ, như một kiểu nhìn chẳng hạn.

pg_relation_filepath là tương tự như pg_relation_filenode, nhưng nó trả về toàn bộ tên đường dẫn tệp (liên quan tới thư mục dữ liệu bó cơ sở dữ liệu PGDATA) của quan hệ đó.

Các hàm được chỉ ra trong Bảng 9-60 đưa ra sự truy cập bẩm sinh tới các tệp trên máy đặt chỗ

(hosting) cho máy chủ. Chỉ các tệp trong thư mục bó cơ sở dữ liệu và log_directory có thể được truy cập. Hãy sử dụng một đường dẫn tương đối cho các tệp trong thư mục bó đó, và một đường dẫn khớp với thiết lập cấu hình log_directory cho các tệp lưu ký. Sự sử dụng các hàm đó giới hạn cho các siêu người sử dụng.

Bảng 9-60. Các hàm truy cập tệp chung

Tên Dạng trả về Mô tả

pg_ls_dir(dirname text) setof text Liệt kê các nội dung của một thư mục pg_read_file(filename text, offset bigint, length bigint) text Trả về các nội dung của một tệp văn bản pg_stat_file(filename text) record Trả về thông tin về một tệp

pg_ls_dir trả về tất cả các tên trong thư mục được chỉ định, ngoại trừ các đầu vào đặc biệt “.” và “..”.

pg_read_file trả về một phần của một tệp văn bản, bắt đầu ở offset được đưa ra, trả về nhiều nhất

length các byte (ít hơn nếu kết thúc tệp đạt tới được đầu tiên). Nếu offset là âm, thì nó là ở cuối tệp.

pg_stat_file trả về một bản ghi chứa kích thước tệp, dấu thời gian được truy cập lần cuối, dấu thời gian được sửa đổi lần cuối, dấu thời gian thay đổi tình trạng tệp lần cuối (chỉ cho các nền tảng Unix), dấu thời gian tạo tệp (chỉ cho Windows), và một boolean chỉ ra nếu đó là một thư mục. Các sử dụng điển hình bao gồm:

SELECT * FROM pg_stat_file(’filename’);

SELECT (pg_stat_file(’filename’)).modification;

Các hàm được chỉ ra trong Bảng 9-61 quản lý các khóa cố vấn. Để có các chi tiết về sử dụng đúng các hàm đó, hãy xem Phần 13.3.4.

Bảng 9-61. Các hàm khóa cố vấn

Tên Dạng trả về Mô tả

pg_advisory_lock(key bigint) void Có được khóa cố vấn độc quyền pg_advisory_lock(key1 int, key2 int) void Có được khóa cố vấn độc quyền pg_advisory_lock_shared(key bigint) void Có được khóa cố vấn chia sẻ pg_advisory_lock_shared(key1 int, key2 int) void Có được khóa cố vấn chia sẻ

pg_try_advisory_lock(key bigint) boolean Có được khóa cố vấn độc quyền nếu sẵn sàng pg_try_advisory_lock(key1 int, key2 int) boolean Có được khóa cố vấn độc quyền nếu sẵn sàng pg_try_advisory_lock_shared(key bigint) boolean Có được khóa cố vấn chia sẻ nếu sẵn sàng pg_try_advisory_lock_shared(key1 int, key2 int) boolean Có được khóa cố vấn chia sẻ nếu sẵn sàng pg_advisory_unlock(key bigint) boolean Đưa ra một khóa cố vấn độc quyền pg_advisory_unlock(key1 int, key2 int) boolean Đưa ra một khóa cố vấn độc quyền pg_advisory_unlock_shared(key bigint) boolean Đưa ra một khóa cố vấn chia sẻ pg_advisory_unlock_shared(key1 int, key2 int) boolean Đưa ra một khóa cố vấn chia sẻ

pg_advisory_unlock_all() void Đưa ra tất cả các khóa cố vấn được phiên làm việc hiện hành nắm giữ

Một phần của tài liệu Tài liệu quản trị postgresql (Trang 272 - 278)

Tải bản đầy đủ (PDF)

(372 trang)