PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chuyên sâu về nhà cung cấp dịch vụ đám mây:PostgreSQL trên Google Cloud Platform (GCP)

Bắt đầu từ đâu?

Nơi tốt nhất tôi có thể tìm để bắt đầu không gì khác hơn là tài liệu chính thức. Ngoài ra còn có một kênh Youtube GCP cho những người thích đa phương tiện. Sau khi tìm thấy chính mình trong vùng đất tài liệu Cloud SQL, tôi đã chuyển sang Khái niệm nơi chúng tôi được hứa sẽ "phát triển sự hiểu biết sâu sắc" về sản phẩm.

Hãy bắt đầu!

Các tính năng của Google Cloud của PostgreSQL

Google Cloud SQL dành cho PostgreSQL cung cấp tất cả các tính năng tiêu chuẩn mà chúng tôi mong đợi từ một giải pháp được quản lý:tính khả dụng cao với tính năng chuyển đổi dự phòng tự động, sao lưu tự động, mã hóa khi nghỉ và chuyển, ghi nhật ký và giám sát nâng cao, và của khóa học một API phong phú để tương tác với tất cả các dịch vụ.

Và lịch sử một chút, hỗ trợ PostgreSQL bắt đầu vào tháng 3 năm 2017, cho đến thời điểm đó, công cụ cơ sở dữ liệu duy nhất được hỗ trợ là MySQL.

Cloud SQL chạy PostgreSQL trên nền tảng điện toán Thế hệ thứ hai của Google. Danh sách đầy đủ các tính năng có sẵn ở đây và cũng có ở đây. Xem lại trước đây, rõ ràng là chưa bao giờ có nền tảng Thế hệ thứ nhất cho PostgreSQL.

Cơ sở dữ liệu chạy trên nền tảng Thế hệ thứ hai dự kiến ​​sẽ chạy với tốc độ nhanh hơn 7 lần và có dung lượng lưu trữ nhiều hơn 20 lần. Blog thông báo về nền tảng Thế hệ thứ hai đi sâu vào chi tiết của việc chạy thử nghiệm sysbench để so sánh Google Cloud SQL với AWS của đối thủ cạnh tranh chính sau đó trong cả hai phiên bản RDS và Aurora. Kết quả đã làm tôi ngạc nhiên khi chúng cho thấy Cloud SQL hoạt động tốt hơn trong khi các thử nghiệm gần đây được thực hiện bằng AWS Benchmark được phát hành khoảng một năm sau đó đã kết luận ngược lại. Đó là khoảng thời gian hỗ trợ PostgreSQL có sẵn. Trong khi tôi cảm thấy khó chịu với ý tưởng tự mình chạy điểm chuẩn, tôi đoán rằng có hai yếu tố tiềm ẩn có thể ảnh hưởng đến kết quả:điểm chuẩn sysbench của Google sử dụng các thông số khác nhau và AWS có thể đã cải thiện sản phẩm của họ trong thời gian đó.

Tương thích với GCP PostgreSQL

Như mong đợi, Google Cloud SQL dành cho PostgreSQL gần như là một bản thay thế bổ sung cho phiên bản cộng đồng và hỗ trợ tất cả các ngôn ngữ thủ tục SQL PL / pgSQL.

Một số tính năng không khả dụng vì lý do bảo mật, ví dụ:quyền truy cập SUPERUSER. Các tính năng khác đã bị loại bỏ do những rủi ro tiềm ẩn đối với sự ổn định và hiệu suất của sản phẩm. Cuối cùng, một số tùy chọn và thông số không thể thay đổi được, mặc dù có thể thực hiện các yêu cầu thay đổi hành vi đó thông qua Nhóm thảo luận Cloud SQL.

Cloud SQL cũng tương thích với giao thức PostgreSQL.

Khi nói đến cách ly giao dịch, Cloud SQL tuân theo hành vi mặc định của PostgreSQL, mặc định là mức cô lập Đã cam kết đọc.

Đối với một số thông số cấu hình máy chủ, Cloud SQL triển khai các phạm vi khác nhau vì những lý do không được giải thích trong tài liệu, vẫn là một điều quan trọng cần nhớ.

Mạng

Có nhiều cách để kết nối với cơ sở dữ liệu, tùy thuộc vào việc phiên bản đó nằm trên mạng riêng hay mạng công cộng (các ứng dụng kết nối từ bên ngoài GCP). Chung cho cả hai trường hợp là VPC được xác định trước do Google quản lý, nơi có tất cả các phiên bản cơ sở dữ liệu Cloud SQL.

IP Riêng

Máy khách kết nối với địa chỉ IP riêng được định tuyến qua kết nối ngang hàng giữa các VPC lưu trữ máy khách và phiên bản cơ sở dữ liệu tương ứng. Mặc dù không dành riêng cho PostgreSQL, điều quan trọng là phải xem lại các yêu cầu mạng, để tránh các sự cố kết nối. Một gotcha:sau khi được bật, khả năng IP riêng không thể bị xóa.

Kết nối từ Ứng dụng Bên ngoài

Kết nối từ các ứng dụng được lưu trữ bên ngoài GCP, có thể và phải được mã hóa. Ngoài ra, để tránh các cuộc tấn công khác nhau, các kết nối máy khách và ứng dụng phải cài đặt chứng chỉ máy khách được cung cấp. Quy trình tạo và định cấu hình chứng chỉ hơi phức tạp, đòi hỏi các công cụ tùy chỉnh để đảm bảo rằng chứng chỉ được gia hạn định kỳ. Đó có thể là một trong những lý do tại sao Google cung cấp tùy chọn sử dụng Cloud SQL Proxy.

Kết nối bằng Cloud SQL Proxy

Việc thiết lập khá đơn giản, trên thực tế, tôi thấy đúng với tất cả các hướng dẫn trong tài liệu Google Cloud SQL. Trên một lưu ý liên quan, việc gửi phản hồi về tài liệu rất đơn giản và tính năng chụp ảnh màn hình là lần đầu tiên đối với tôi.

Có nhiều cách để cấp phép kết nối proxy và tôi đã chọn định cấu hình tài khoản dịch vụ, giống như được nêu trong tài liệu Cloud SQL Proxy.

Khi mọi thứ đã sẵn sàng, đã đến lúc khởi động proxy:

~/usr/local/google $ ./cloud_sql_proxy -instances=omiday:us-west1:s9s201907141919=tcp:5432 -credential_file=omiday-427c34fce588.json

2019/07/14 21:22:43 failed to setup file descriptor limits: failed to set rlimit {&{8500 4096}} for max file descriptors: invalid argument

2019/07/14 21:22:43 using credential file for authentication; [email protected]

2019/07/14 21:22:43 Listening on 127.0.0.1:5432 for omiday:us-west1:s9s201907141919

2019/07/14 21:22:43 Ready for new connections

Để kết nối với phiên bản từ xa, chúng tôi hiện đang sử dụng proxy bằng cách chỉ định localhost thay vì địa chỉ IP công cộng của phiên bản:

~ $ psql "user=postgres dbname=postgres password=postgres hostaddr=127.0.0.1"

Pager usage is off.

psql (11.4, server 9.6.11)

Type "help" for help.

Lưu ý rằng không có mã hóa nào vì chúng tôi đang kết nối cục bộ và proxy sẽ đảm nhận việc mã hóa lưu lượng truy cập vào đám mây.

Một tác vụ DBA phổ biến là xem các kết nối đến cơ sở dữ liệu bằng cách truy vấn pg_stat_activity. Tài liệu nói rằng các kết nối proxy sẽ được hiển thị dưới dạng cloudqlproxy ~ 1.2.3.4, vì vậy tôi muốn xác minh xác nhận quyền sở hữu đó. Tôi đã mở hai phiên dưới dạng postgres, một phiên qua proxy và một phiên khác từ địa chỉ nhà riêng của tôi, vì vậy, truy vấn sau sẽ thực hiện:

[email protected]:5432 postgres> select * from pg_stat_activity where usename = 'postgres';

-[ RECORD 1 ]----+-----------------------------------------------------------

datid            | 12996

datname          | postgres

pid              | 924

usesysid         | 16389

usename          | postgres

application_name | psql

client_addr      |

client_hostname  |

client_port      | -1

backend_start    | 2019-07-15 04:25:37.614205+00

xact_start       | 2019-07-15 04:28:43.477681+00

query_start      | 2019-07-15 04:28:43.477681+00

state_change     | 2019-07-15 04:28:43.477684+00

wait_event_type  |

wait_event       |

state            | active

backend_xid      |

backend_xmin     | 8229

query            | select * from pg_stat_activity where usename = 'postgres';

-[ RECORD 2 ]----+-----------------------------------------------------------

datid            | 12996

datname          | postgres

pid              | 946

usesysid         | 16389

usename          | postgres

application_name | psql

client_addr      | <MY_HOME_IP_ADDRESS>

client_hostname  |

client_port      | 60796

backend_start    | 2019-07-15 04:27:50.378282+00

xact_start       |

query_start      |

state_change     | 2019-07-15 04:27:50.45613+00

wait_event_type  |

wait_event       |

state            | idle

backend_xid      |

backend_xmin     |

query            |

Có vẻ như thay vào đó các kết nối proxy được xác định là client_port ==-1 và client_addr trống. Điều này có thể được xác nhận thêm bằng cách so sánh dấu thời gian cho backend_start và nhật ký proxy bên dưới:

2019/07/14 21:25:37 New connection for "omiday:us-west1:s9s201907141919"

Tính khả dụng cao của PostgreSQL trên Google Cloud

Google Cloud SQL dành cho PostgreSQL đảm bảo tính khả dụng cao bằng cách sử dụng đồng bộ hóa dữ liệu lưu trữ mức thấp bằng các đĩa liên tục trong khu vực. Chuyển đổi dự phòng là tự động, với khoảng thời gian kiểm tra nhịp tim là một giây và chuyển đổi dự phòng được kích hoạt sau khoảng 60 giây.

Hiệu suất và Giám sát

Phần Hiệu suất của tài liệu chỉ ra các quy tắc chung của đám mây:giữ cho cơ sở dữ liệu (cả bản sao chép và đọc) gần ứng dụng và chia tỷ lệ phiên bản theo chiều dọc. Điều nổi bật là khuyến nghị cung cấp phiên bản có ít nhất 60 GB RAM khi hiệu suất là quan trọng.

Stackdriver cung cấp khả năng giám sát và ghi nhật ký, cũng như quyền truy cập vào nhật ký PostgreSQL:

Kiểm soát Truy cập

Điều này được triển khai ở cấp dự án, phiên bản và cơ sở dữ liệu.

Kiểm soát Truy cập Dự án

Kiểm soát truy cập dự án là kiểm soát truy cập dành riêng cho đám mây - nó sử dụng khái niệm vai trò IAM để cho phép các thành viên dự án (người dùng, nhóm hoặc tài khoản dịch vụ) truy cập vào các tài nguyên Cloud SQL khác nhau. Danh sách các vai trò hơi dễ hiểu, để có mô tả chi tiết về từng vai trò và các quyền liên quan, hãy tham khảo APIs Explorer hoặc API quản trị Cloud SQL cho một trong các ngôn ngữ lập trình được hỗ trợ.

Để chứng minh cách hoạt động của các vai trò IAM, hãy tạo tài khoản dịch vụ chỉ đọc (người xem):

Bắt đầu phiên bản proxy mới trên cổng 5433 bằng tài khoản dịch vụ được liên kết với vai trò của người xem:

~/usr/local/google $ ./cloud_sql_proxy -instances=omiday:us-west1:s9s201907141919=tcp:5433 -credential_file=omiday-4508243deca9.json

2019/07/14 21:49:56 failed to setup file descriptor limits: failed to set rlimit {&{8500 4096}} for max file descriptors: invalid argument

2019/07/14 21:49:56 using credential file for authentication; [email protected]

2019/07/14 21:49:56 Listening on 127.0.0.1:5433 for omiday:us-west1:s9s201907141919

2019/07/14 21:49:56 Ready for new connections

Mở kết nối psql tới 127.0.0.1:5433:

~ $ psql "user=postgres dbname=postgres password=postgres hostaddr=127.0.0.1 port=5433"

Lệnh thoát bằng:

psql: server closed the connection unexpectedly

      This probably means the server terminated abnormally

      before or while processing the request.

Rất tiếc! Hãy kiểm tra nhật ký proxy:

2019/07/14 21:50:33 New connection for "omiday:us-west1:s9s201907141919"

2019/07/14 21:50:33 couldn't connect to "omiday:us-west1:s9s201907141919": ensure that the account has access to "omiday:us-west1:s9s201907141919" (and make sure there's no typo in that name). Error during createEphemeral for omiday:us-west1:s9s201907141919: googleapi: Error 403: The client is not authorized to make this request., notAuthorized

Kiểm soát Truy cập Phiên bản

Quyền truy cập cấp phiên bản phụ thuộc vào nguồn kết nối:

Sự kết hợp của các phương thức ủy quyền thay thế pg_hba.conf phổ biến.

Sao lưu và Phục hồi

Theo mặc định, sao lưu tự động được bật:

Mặc dù các bản sao lưu không ảnh hưởng đến hoạt động đọc và ghi cơ sở dữ liệu nhưng chúng ảnh hưởng đến hiệu suất và do đó, nên lập lịch sao lưu trong thời gian hoạt động thấp hơn.

Để dự phòng, các bản sao lưu có thể được lưu trữ ở hai khu vực (có tính phí bổ sung) với tùy chọn chọn vị trí tùy chỉnh.

Để tiết kiệm dung lượng lưu trữ, hãy sử dụng tính năng nén. Các tệp nén .gz được khôi phục một cách minh bạch.

Cloud SQL cũng hỗ trợ sao chép phiên bản. Đối với tập dữ liệu nhỏ nhất, hoạt động mất khoảng 3 phút:

Thời gian bắt đầu sao chép 10:07:10:

Nhật ký PostgreSQL cho thấy PostgreSQL có sẵn trên phiên bản nhân bản lúc 10:10:47:

Đó vẫn là cách dễ dàng hơn so với sao lưu và khôi phục, để tạo bản sao của một phiên bản cho mục đích thử nghiệm, phát triển hoặc khắc phục sự cố.

Các phương pháp hay nhất của Google Cloud cho PostgreSQL

  • Định cấu hình chính sách kích hoạt cho các phiên bản không bắt buộc phải chạy 24/7.
  • Đặt phiên bản cơ sở dữ liệu trong cùng một vùng hoặc khu vực với các phiên bản máy tính và ứng dụng App Engine để tránh độ trễ mạng.
  • Tạo phiên bản cơ sở dữ liệu trong cùng một vùng với Compute Engine. Nếu sử dụng bất kỳ loại kết nối nào khác, hãy chấp nhận vùng mặc định.
  • Người dùng được tạo bằng Cloud SQL theo mặc định là người dùng siêu cấp trên đám mây. Sử dụng PostgreSQL ALTER ROLE để sửa đổi quyền của họ.
  • Sử dụng phiên bản Cloud SQL Proxy mới nhất.
  • Tên phiên bản phải bao gồm dấu thời gian để có thể sử dụng lại tên đó khi xóa và tạo lại phiên bản.
  • pg_dump mặc định bao gồm các đối tượng lớn. Nếu cơ sở dữ liệu chứa BLOB-s, hãy thực hiện kết xuất trong khoảng thời gian hoạt động thấp để ngăn phiên bản không phản hồi.
  • Sử dụng gcloud sql connect để nhanh chóng kết nối từ một máy khách bên ngoài mà không cần đưa địa chỉ IP của máy khách vào danh sách trắng.
  • Đăng ký nhóm thông báo để nhận thông báo về các cập nhật và cảnh báo sản phẩm, chẳng hạn như các vấn đề khi tạo phiên bản:
  • Đảm bảo rằng các ứng dụng triển khai các kỹ thuật quản lý kết nối cơ sở dữ liệu.
  • Các phiên bản bị dừng hơn 90 ngày sẽ bị xóa trừ khi chúng không ở trạng thái tạm ngừng.
  • Thực hiện chuyển đổi dự phòng thủ công để kiểm tra hành vi của ứng dụng và độ dài thời gian ngừng hoạt động.
  • Sử dụng phiên bản công cụ mặc định.
  • Dung lượng lưu trữ cho các phiên bản được định cấu hình để tự động tăng dung lượng lưu trữ, sẽ tăng lên 25 GB. Vì không thể lấy lại không gian lưu trữ, hãy đặt giới hạn tăng lên đối với kích thước ước tính của cơ sở dữ liệu trong chu kỳ ngân sách tiếp theo và theo dõi các truy vấn đang chạy,
  • Sử dụng thời gian bảo trì “sớm hơn” cho các trường hợp thử nghiệm:
  • Các ứng dụng phải sử dụng các kết nối tồn tại và thời gian dự phòng theo cấp số nhân để nhanh chóng khôi phục sau khi khởi động lại phiên bản.
  • Ứng dụng dựa trên các bản sao đã đọc nên cân nhắc sử dụng 3 bản sao để tránh các sự cố do hỏng đĩa liên tục trong khu vực dẫn đến cả hai bản sao đều không khả dụng.
  • Định cấu hình các bản sao đã đọc để cải thiện hiệu suất đọc.
  • Bắt buộc phải khởi động lại phiên bản khi cập nhật danh sách địa chỉ IP được phép truy cập phiên bản công khai để ngắt kết nối các kết nối hiện có.
  • Xem lại nhóm dành riêng cho StackOverflow Cloud SQL để biết thêm thông tin.

Khởi chạy Danh sách kiểm tra cho Cloud SQL

Phần danh sách kiểm tra trong tài liệu cung cấp tổng quan về các hoạt động được đề xuất khi thiết lập phiên bản Cloud SQL sẵn sàng sản xuất cho PostgreSQL. Đặc biệt, các ứng dụng phải được thiết kế để xử lý việc khởi động lại Cloud SQL. Ngoài ra, mặc dù không có giới hạn truy vấn trên giây nhưng vẫn có giới hạn kết nối.

Hỗ trợ Tiện ích mở rộng PostgreSQL GCP

Cloud SQL hỗ trợ hầu hết các phần mở rộng PostgreSQL. Tính đến thời điểm này, trong số 52 tiện ích mở rộng cộng đồng, có 22 tiện ích mở rộng không được hỗ trợ và 2 tiện ích mở rộng PostGIS không được hỗ trợ.

postgis_raster

postgis_sfcgal

Đối với các tiện ích mở rộng PostgreSQL, chúng tôi có thể xem xét kho đóng góp của PostgreSQL hoặc tốt hơn, khác với đầu ra của pg_available_extensions:

Thượng lưu:

~ $ psql -U postgres -p 54396

Pager usage is off.

psql (11.4, server 9.6.14)

Type "help" for help.

[email protected][local]:54396 postgres# select * from pg_available_extensions order by name;

      name        | default_version | installed_version |                               comment

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

adminpack          | 1.1 |                   | administrative functions for PostgreSQL

autoinc            | 1.0 |                   | functions for autoincrementing fields

bloom              | 1.0 |                   | bloom access method - signature file based index

btree_gin          | 1.0 |                   | support for indexing common datatypes in GIN

btree_gist         | 1.2 |                   | support for indexing common datatypes in GiST

chkpass            | 1.0 |                   | data type for auto-encrypted passwords

citext             | 1.3 |                   | data type for case-insensitive character strings

cube               | 1.2 |                   | data type for multidimensional cubes

dblink             | 1.2 |                   | connect to other PostgreSQL databases from within a database

dict_int           | 1.0 |                   | text search dictionary template for integers

dict_xsyn          | 1.0 |                   | text search dictionary template for extended synonym processing

earthdistance      | 1.1 |                   | calculate great-circle distances on the surface of the Earth

file_fdw           | 1.0 |                   | foreign-data wrapper for flat file access

fuzzystrmatch      | 1.1 |                   | determine similarities and distance between strings

hstore             | 1.4 |                   | data type for storing sets of (key, value) pairs

hstore_plperl      | 1.0 |                   | transform between hstore and plperl

hstore_plperlu     | 1.0 |                   | transform between hstore and plperlu

hstore_plpython2u  | 1.0 |                   | transform between hstore and plpython2u

hstore_plpythonu   | 1.0 |                   | transform between hstore and plpythonu

insert_username    | 1.0 |                   | functions for tracking who changed a table

intagg             | 1.1 |                   | integer aggregator and enumerator (obsolete)

intarray           | 1.2 |                   | functions, operators, and index support for 1-D arrays of integers

isn                | 1.1 |                   | data types for international product numbering standards

lo                 | 1.1 |                   | Large Object maintenance

ltree              | 1.1 |                   | data type for hierarchical tree-like structures

ltree_plpython2u   | 1.0 |                   | transform between ltree and plpython2u

ltree_plpythonu    | 1.0 |                   | transform between ltree and plpythonu

moddatetime        | 1.0 |                   | functions for tracking last modification time

pageinspect        | 1.5 |                   | inspect the contents of database pages at a low level

pg_buffercache     | 1.2 |                   | examine the shared buffer cache

pg_freespacemap    | 1.1 |                   | examine the free space map (FSM)

pg_prewarm         | 1.1 |                   | prewarm relation data

pg_stat_statements | 1.4             | | track execution statistics of all SQL statements executed

pg_trgm            | 1.3 |                   | text similarity measurement and index searching based on trigrams

pg_visibility      | 1.1 |                   | examine the visibility map (VM) and page-level visibility info

pgcrypto           | 1.3 |                   | cryptographic functions

pgrowlocks         | 1.2 |                   | show row-level locking information

pgstattuple        | 1.4 |                   | show tuple-level statistics

plpgsql            | 1.0 | 1.0               | PL/pgSQL procedural language

postgres_fdw       | 1.0 |                   | foreign-data wrapper for remote PostgreSQL servers

refint             | 1.0 |                   | functions for implementing referential integrity (obsolete)

seg                | 1.1 |                   | data type for representing line segments or floating-point intervals

sslinfo            | 1.2 |                   | information about SSL certificates

tablefunc          | 1.0 |                   | functions that manipulate whole tables, including crosstab

tcn                | 1.0 |                   | Triggered change notifications

timetravel         | 1.0 |                   | functions for implementing time travel

tsearch2           | 1.0 |                   | compatibility package for pre-8.3 text search functions

tsm_system_rows    | 1.0 |                   | TABLESAMPLE method which accepts number of rows as a limit

tsm_system_time    | 1.0 |                   | TABLESAMPLE method which accepts time in milliseconds as a limit

unaccent           | 1.1 |                   | text search dictionary that removes accents

uuid-ossp          | 1.1 |                   | generate universally unique identifiers (UUIDs)

xml2               | 1.1 |                   | XPath querying and XSLT

Cloud SQL:

[email protected]:5432 postgres> select * from pg_available_extensions where name !~ '^postgis' order by name;

      name        | default_version | installed_version |                              comment

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

bloom              | 1.0 |                   | bloom access method - signature file based index

btree_gin          | 1.0 |                   | support for indexing common datatypes in GIN

btree_gist         | 1.2 |                   | support for indexing common datatypes in GiST

chkpass            | 1.0 |                   | data type for auto-encrypted passwords

citext             | 1.3 |                   | data type for case-insensitive character strings

cube               | 1.2 |                   | data type for multidimensional cubes

dict_int           | 1.0 |                   | text search dictionary template for integers

dict_xsyn          | 1.0 |                   | text search dictionary template for extended synonym processing

earthdistance      | 1.1 |                   | calculate great-circle distances on the surface of the Earth

fuzzystrmatch      | 1.1 |                   | determine similarities and distance between strings

hstore             | 1.4 |                   | data type for storing sets of (key, value) pairs

intagg             | 1.1 |                   | integer aggregator and enumerator (obsolete)

intarray           | 1.2 |                   | functions, operators, and index support for 1-D arrays of integers

isn                | 1.1 |                   | data types for international product numbering standards

lo                 | 1.1 |                   | Large Object maintenance

ltree              | 1.1 |                   | data type for hierarchical tree-like structures

pg_buffercache     | 1.2 |                   | examine the shared buffer cache

pg_prewarm         | 1.1 |                   | prewarm relation data

pg_stat_statements | 1.4             | | track execution statistics of all SQL statements executed

pg_trgm            | 1.3 |                   | text similarity measurement and index searching based on trigrams

pgcrypto           | 1.3 |                   | cryptographic functions

pgrowlocks         | 1.2 |                   | show row-level locking information

pgstattuple        | 1.4 |                   | show tuple-level statistics

plpgsql            | 1.0 | 1.0               | PL/pgSQL procedural language

sslinfo            | 1.2 |                   | information about SSL certificates

tablefunc          | 1.0 |                   | functions that manipulate whole tables, including crosstab

tsm_system_rows    | 1.0 |                   | TABLESAMPLE method which accepts number of rows as a limit

tsm_system_time    | 1.0 |                   | TABLESAMPLE method which accepts time in milliseconds as a limit

unaccent           | 1.1 |                   | text search dictionary that removes accents

uuid-ossp          | 1.1 |                   | generate universally unique identifiers (UUIDs)

Các tiện ích mở rộng không được hỗ trợ trong Cloud SQL:

Các chức năng quản trị
adminpack          1.1 administrative functions for PostgreSQL

autoinc            1.0 functions for autoincrementing fields

dblink             1.2 connect to other PostgreSQL databases from within a database

file_fdw           1.0 foreign-data wrapper for flat file access

hstore_plperl      1.0 transform between hstore and plperl

hstore_plperlu     1.0 transform between hstore and plperlu

hstore_plpython2u  1.0 transform between hstore and plpython2u

hstore_plpythonu   1.0 transform between hstore and plpythonu

insert_username    1.0 functions for tracking who changed a table

ltree_plpython2u   1.0 transform between ltree and plpython2u

ltree_plpythonu    1.0 transform between ltree and plpythonu

moddatetime        1.0 functions for tracking last modification time

pageinspect        1.5 inspect the contents of database pages at a low level

pg_freespacemap    1.1 examine the free space map (FSM)

pg_visibility      1.1 examine the visibility map (VM) and page-level visibility info

postgres_fdw       1.0 foreign-data wrapper for remote PostgreSQL servers

refint             1.0 functions for implementing referential integrity (obsolete)

seg                1.1 data type for representing line segments or floating-point intervals

tcn                1.0 Triggered change notifications

timetravel         1.0 functions for implementing time travel

tsearch2           1.0 compatibility package for pre-8.3 text search functions

xml2               1.1 XPath querying and XSLT

Ghi nhật ký

Các hoạt động được thực hiện trong Cloud SQL được ghi lại trong tab Hoạt động cùng với tất cả các chi tiết. Ví dụ từ việc tạo một phiên bản, hiển thị tất cả chi tiết phiên bản:

Chuyển PostgreSQL sang GCP

Để cung cấp khả năng di chuyển các cài đặt PostgreSQL tại chỗ, Google tận dụng pgBouncer.

Lưu ý rằng không có trình hướng dẫn GCP Console cho việc di chuyển PostgreSQL.

DBA Hãy coi chừng!

Tính khả dụng và nhân rộng cao

Một nút chính không thể chuyển đổi dự phòng thành một bản sao đã đọc. Phần tương tự nêu ra các khía cạnh quan trọng khác của các bản sao đã đọc:

  • có thể được thực hiện ngoại tuyến bất kỳ lúc nào để vá lỗi
  • không theo dõi nút chính trong một vùng khác sau khi chuyển đổi dự phòng - vì quá trình sao chép là đồng bộ, điều này có thể ảnh hưởng đến độ trễ của bản sao
  • không có sự cân bằng tải giữa các bản sao, nói cách khác, không có ứng dụng điểm cuối nào có thể được trỏ tới
  • kích thước phiên bản sao ít nhất phải bằng kích thước của nút chính
  • không sao chép giữa các vùng
  • không thể sao lưu các bản sao
  • tất cả các bản sao phải được xóa trước khi một bản sao chính có thể được khôi phục từ bản sao lưu hoặc bị xóa
  • sao chép theo tầng không khả dụng

Người dùng

Theo mặc định, “cloud superuser” là postgres, là một thành viên của vai trò cloudqlsuperuser. Đổi lại, cloudqlsuperuser kế thừa các vai trò PostgreSQL mặc định:

[email protected]:5432 postgres> \du+ postgres

                           List of roles

Role name  | Attributes       | Member of | Description

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

postgres   | Create role, Create DB | {cloudsqlsuperuser} |



[email protected]:5432 postgres> \du+ cloudsqlsuperuser

                              List of roles

   Role name       | Attributes       | Member of | Description

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

cloudsqlsuperuser  | Create role, Create DB | {pg_monitor} |

Lưu ý rằng các vai trò SUPERUSER và REPLICATION không khả dụng.

Sao lưu và phục hồi

Không thể xuất các bản sao lưu.

Không thể sử dụng các bản sao lưu để nâng cấp một phiên bản, tức là khôi phục vào một công cụ PostgreSQL khác.

Các tính năng như PITR, Sao chép lôgic và Biên dịch JIT không khả dụng. Yêu cầu về tính năng có thể được gửi trong Trình theo dõi vấn đề của Google.

Mã hóa

Tạo phiên bản SSL / TLS được bật nhưng không được thực thi:

Trong chế độ này, bạn có thể yêu cầu mã hóa, tuy nhiên không thể xác thực chứng chỉ.

~ $ psql "sslmode=verify-ca user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"

psql: root certificate file "/home/lelu/.postgresql/root.crt" does not exist

Either provide the file or change sslmode to disable server certificate verification.

~ $ psql "sslmode=require user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"

Pager usage is off.

psql (11.4, server 9.6.11)

SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)

Type "help" for help.

Cố gắng kết nối bằng psql với phiên bản được thực thi SSL sẽ trả về lỗi tự giải thích:

~ $ psql "sslmode=require user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"

psql: FATAL:  connection requires a valid client certificate

Bộ nhớ

  • Bộ nhớ có thể tăng lên sau khi tạo phiên bản nhưng không bao giờ giảm, vì vậy hãy coi chừng chi phí liên quan đến không gian bộ nhớ ngày càng tăng hoặc định cấu hình giới hạn tăng.
  • Bộ nhớ được giới hạn ở 30 TB.

CPU

Các phiên bản có thể được tạo với ít hơn một lõi, tuy nhiên, tùy chọn này không khả dụng trong Bảng điều khiển Cloud SQL vì phiên bản phải được tạo bằng cách chỉ định một trong các loại máy mẫu, trong trường hợp này - bậc:

Ví dụ về cách tạo phiên bản mã chia sẻ bằng gcloud bên trong Cloud Shell:

Số lượng CPU được giới hạn ở 64, một giới hạn tương đối thấp đối với cài đặt, xem xét lại thời điểm 9.2 được đánh giá là các máy chủ cao cấp bắt đầu ở 32 lõi.

Vị trí Phiên bản

Vị trí đa vùng chỉ khả dụng để sao lưu.

Truy cập qua IP Công cộng

Theo mặc định, Trình hướng dẫn Bảng điều khiển GCP chỉ cho phép truy cập địa chỉ IP công khai, tuy nhiên, quyền truy cập bị từ chối cho đến khi mạng của khách hàng được định cấu hình:

Bảo trì

Các bản cập nhật có thể vượt quá cửa sổ bảo trì và các bản sao đã đọc được cập nhật bất kỳ lúc nào.

Tài liệu không chỉ định thời lượng của cửa sổ bảo trì là bao lâu. Thông tin được cung cấp khi tạo phiên bản:

Các thay đổi đối với số lượng CPU, kích thước bộ nhớ hoặc vùng chứa phiên bản định vị yêu cầu cơ sở dữ liệu ngoại tuyến trong vài phút.

Người dùng

Cloud SQL sử dụng các thuật ngữ “vai trò” và “người dùng” thay thế cho nhau.

Tính khả dụng cao

Chi phí cho một cấu hình có tính khả dụng cao gấp đôi phiên bản độc lập và bao gồm cả dung lượng lưu trữ.

Tự động chuyển đổi dự phòng được bắt đầu sau khoảng 60 giây sau khi nút chính không khả dụng. Theo báo cáo của Oracle MAA, điều này tương đương với khoản lỗ $ 5,800 mỗi phút. Cân nhắc rằng phải mất từ ​​2 đến 3 phút cho đến khi các ứng dụng có thể kết nối lại, sự cố mất điện tăng gấp đôi lên gấp ba lần. Ngoài ra, khoảng thời gian 60 giây nhịp tim dường như không phải là một tùy chọn có thể định cấu hình.

Sao chép

Không thể truy cập các bản sao đã đọc bằng một điểm cuối duy nhất, mỗi điểm nhận một địa chỉ IP mới:

Đĩa liên tục khu vực cung cấp dự phòng dữ liệu với chi phí hiệu suất ghi.

Cloud SQL sẽ không chuyển đổi dự phòng để đọc các bản sao, do đó trình đọc không thể được coi là giải pháp có tính khả dụng cao

Bản sao bên ngoài và bản chính bên ngoài hiện không được hỗ trợ.

Đang kết nối với Phiên bản

Google does not automatically renew the instance SSL certificates, however, both the initiation and rotation procedures can be automated.

If the application is built on the App Engine platform additional limits apply, such as 60 seconds for a database request to complete, 60 concurrent connections for PHP applications. The “App Engine Limits” section in Quotas and limits provides more details:

IP addresses in the range 172.17.0.0/16 are reserved.

Administration

Once started, operations cannot be canceled. Runaway queries can still be stopped by using the pg_terminate_backend and pg_cancel_backend PostgreSQL built-in functions.

A short demonstration using two psql sessions and starting a long running query in the second session:

[email protected]:5432 postgres> select now(); select pg_sleep(3600); select now();

            now

-------------------------------

2019-07-16 02:08:18.739177+00

(1 row)

In the first session, cancel the long running query:

[email protected]:5432 postgres> select pid, client_addr, client_port, query, backend_start from pg_stat_activity where usename = 'postgres';

-[ RECORD 1 ]-+-------------------------------------------------------------------------------------------------------------

pid           | 2182

client_addr   | 173.180.222.170

client_port   | 56208

query         | select pid, client_addr, client_port, query, backend_start from pg_stat_activity where usename = 'postgres';

backend_start | 2019-07-16 01:57:34.99011+00

-[ RECORD 2 ]-+-------------------------------------------------------------------------------------------------------------

pid           | 2263

client_addr   | 173.180.222.170

client_port   | 56276

query         | select pg_sleep(3600);

backend_start | 2019-07-16 02:07:43.860829+00



[email protected]:5432 postgres> select pg_cancel_backend(2263); select now();

-[ RECORD 1 ]-----+--

pg_cancel_backend | t



-[ RECORD 1 ]----------------------

now | 2019-07-16 02:09:09.600399+00

Comparing the timestamps between the two sessions:

ERROR:  canceling statement due to user request

            now

-------------------------------

2019-07-16 02:09:09.602573+00

(1 row)

It’s a match!

While restarting an instance is a recommended method when attempting to resolve database instance issues, avoid restarting before the first restart completed.

Data Import and Export

CSV import/export is limited to one database.

Exporting data as an SQL dump that can be imported later, requires a custom pg_dump command.

To quote from the documentation:

pg_dump -U [USERNAME] --format=plain --no-owner --no-acl [DATABASE_NAME] \

    | sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > [SQL_FILE].sql

Pricing

Charge Type

Instance ON

Instance OFF

Storage

Yes

Yes

Instance

No

Yes

Troubleshooting

Ghi nhật ký

All actions are recorded and can be viewed under the Activity tab.

Resources

Review the Diagnosing Issues with Cloud SQL instances and Known issues sections in the documentation.

Kết luận

Although missing some important features the PostgreSQL DBA is used to, namely PITR and Logical Replication, Google Cloud SQL provides out of the box high-availability, replication, encryption, and automatic storage increase, just to name a few, making manage PostgreSQL an appealing solution for organizations looking to quickly deploy their PostgreSQL workloads or even migrating from Oracle.

Developers can take advantage of cheap instances such as shared CPU (less than one CPU).

Google approaches the PostgreSQL engine adoption in a conservative manner, the stable offering lagging behind current upstream by 3 versions.

Just as with any solution provider consider getting support which can come in handy during edge scenarios such as when instances are suspended.

For professional support, Google maintains a list of partners which currently includes one of the PostgreSQL professional services , namely EDB.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Về tác động của việc viết toàn trang

  2. Hàm truy vấn động Postgres

  3. Lỗi cú pháp ở cuối đầu vào trong PostgreSQL

  4. Cách tự động triển khai cơ sở dữ liệu PostgreSQL

  5. PostgreSQL Autoincrement