Chúng tôi đây. Gần hai thập kỷ bước sang thế kỷ 21 và nhu cầu về sức mạnh tính toán nhiều hơn vẫn là một vấn đề. Các công ty công nghệ đang đập vỉa hè để giải quyết vấn đề lớn này. Các kỹ sư phần cứng đã tìm ra giải pháp bằng cách thay đổi cách họ thiết kế và sản xuất bộ xử lý trung tâm (CPU) của máy tính. Bây giờ chúng chứa nhiều lõi, cho phép diễn ra đồng thời. Đổi lại, các nhà phát triển phần mềm đã điều chỉnh cách họ viết chương trình để thích ứng với sự thay đổi này trong phần cứng.
Cộng đồng PostgreSQL đã tận dụng tối đa các CPU đa lõi này để cải thiện hiệu suất truy vấn. Chỉ cần cập nhật lên phiên bản 9.6 hoặc cao hơn, bạn có thể sử dụng một tính năng được gọi là song song truy vấn để thực hiện các hoạt động khác nhau. Nó chia nhỏ các nhiệm vụ thành các phần nhỏ hơn và trải đều từng tác vụ trên nhiều lõi CPU. Mỗi lõi có thể xử lý các tác vụ cùng một lúc. Do hạn chế về phần cứng, đây là cách duy nhất để cải thiện hiệu suất máy tính khi chúng ta tiến tới tương lai.
Trước khi sử dụng tính năng song song trong cơ sở dữ liệu PostgreSQL, điều cần thiết là phải nhận ra cách nó tạo một truy vấn song song. Bạn sẽ có thể gỡ lỗi và giải quyết bất kỳ vấn đề nào phát sinh.
Tính song song của truy vấn hoạt động như thế nào?
Để hiểu rõ hơn về cách thực thi song song, bạn nên bắt đầu ở cấp máy khách. Để truy cập PostgreSQL, một máy khách phải gửi một yêu cầu kết nối đến máy chủ cơ sở dữ liệu được gọi là postmaster. Người quản lý bưu điện sẽ hoàn thành xác thực và sau đó fork để tạo một quy trình máy chủ mới cho mỗi kết nối. Nó cũng chịu trách nhiệm tạo một vùng bộ nhớ dùng chung có chứa vùng đệm. Vùng đệm giám sát việc chuyển dữ liệu giữa bộ nhớ dùng chung và bộ nhớ. Do đó, thời điểm kết nối được thiết lập, vùng đệm sẽ truyền dữ liệu và cho phép thực hiện song song truy vấn.
Không nhất thiết tất cả các truy vấn phải song song. Có những trường hợp chỉ cần một lượng nhỏ dữ liệu và nó có thể được xử lý nhanh chóng bởi chỉ một lõi. Tính năng này chỉ được sử dụng khi một truy vấn sẽ mất một khoảng thời gian đáng kể để hoàn thành. Trình tối ưu hóa cơ sở dữ liệu xác định xem có nên thực thi song song hay không. Nếu cần thiết, cơ sở dữ liệu sẽ sử dụng một phần bộ nhớ bổ sung được gọi là bộ nhớ chia sẻ động (DSM). Điều này cho phép quy trình thủ lĩnh và quy trình nhân viên nhận biết song song phân chia truy vấn giữa nhiều lõi và thu thập dữ liệu thích hợp.
Hình 1 cung cấp cho bạn một ví dụ về cách diễn ra song song bên trong cơ sở dữ liệu. Quy trình thủ lĩnh chạy truy vấn ban đầu, trong khi các quy trình công nhân riêng lẻ đang khởi tạo một bản sao của cùng một quy trình. Nút tổng hợp một phần, hoặc lõi CPU, chịu trách nhiệm thực hiện quét tuần tự song song của bảng cơ sở dữ liệu.
Trong trường hợp này, mỗi nút quét tuần tự đang xử lý 20% dữ liệu trong các khối 8kb. Các nút giống nhau này có thể điều phối hoạt động của chúng bằng cách sử dụng một kỹ thuật được gọi là nhận thức song song. Mỗi nút có đầy đủ kiến thức về dữ liệu nào đã được xử lý và dữ liệu nào cần được quét trong bảng để hoàn thành truy vấn. Khi các bộ giá trị được thu thập đầy đủ, nó sẽ được gửi đến nút tập hợp để được biên dịch và hoàn thiện.
Hoạt động song song
Nhiều loại truy vấn khác nhau có thể được sử dụng để tìm nạp dữ liệu từ cơ sở dữ liệu để tạo ra tập kết quả. Dưới đây là các hoạt động cụ thể cung cấp cho bạn khả năng tận dụng việc sử dụng nhiều lõi một cách hiệu quả.
Quét tuần tự
Đây là thao tác đọc dữ liệu trong bảng từ đầu đến cuối để thu thập dữ liệu. Nó phân bổ đồng đều khối lượng công việc giữa nhiều lõi để tăng tốc độ xử lý truy vấn. Nó nhận biết được từng hoạt động của lõi, giúp dễ dàng xác định xem toàn bộ truy vấn đã được hoàn thành hay chưa. Sau đó, nút thu thập nhận dữ liệu được trích xuất dựa trên truy vấn.
Tổng hợp
Một hoạt động tiêu chuẩn, lấy một lượng lớn dữ liệu và cô đọng nó thành một số lượng hàng nhỏ hơn. Điều này xảy ra trong quá trình xử lý song song bằng cách chỉ trích xuất từ một bảng hoặc các chỉ mục, thông tin thích hợp dựa trên truy vấn. Thực hiện mức trung bình của dữ liệu cụ thể là một ví dụ tuyệt vời về tổng hợp.
Tham gia băm
Một kỹ thuật được sử dụng để nối dữ liệu giữa hai bảng. Đây là thuật toán nối nhanh nhất, thường được thực hiện với một bảng nhỏ và một bảng lớn. Trước tiên, bạn tạo một bảng băm và tải tất cả dữ liệu từ một bảng vào đó. Sau đó, bạn có thể quét tất cả dữ liệu từ bảng băm và bảng thứ hai, sử dụng quét tuần tự song song. Mỗi bộ giá trị được trích xuất từ quá trình quét được so sánh với bảng băm để xem có khớp hay không. Nếu một kết quả phù hợp được xác định, dữ liệu sẽ được kết hợp với nhau. Với việc phát hành PostgreSQL 11, việc sử dụng song song để hoàn thành một phép nối băm sẽ mất khoảng một phần ba thời gian xử lý trước đó của nó.
Hợp nhất Tham gia
Nếu trình tối ưu hóa xác định rằng một phép nối băm sẽ vượt quá dung lượng bộ nhớ, nó sẽ thực hiện một phép nối hợp nhất để thay thế. Quá trình này bao gồm việc quét qua hai danh sách được sắp xếp cùng một lúc và kết hợp các phần tử giống nhau lại với nhau. Nếu các mục không bằng nhau, dữ liệu sẽ không được kết hợp với nhau.
Tham gia vòng lặp lồng nhau
Thao tác này được sử dụng khi bạn phải nối hai bảng chứa các ngôn ngữ lập trình khác nhau, chẳng hạn như Quick Basic, Python, v.v. Mỗi bảng được quét và xử lý bằng cách sử dụng nhiều lõi. Nếu dữ liệu khớp, nó sẽ được gửi đến nút tập hợp để được kết hợp. Các chỉ mục cũng được quét, đó là lý do tại sao quá trình này chứa nhiều vòng lặp để truy xuất dữ liệu. Trung bình, sẽ chỉ mất một phần ba thời gian để hoàn tất quá trình liên kết bằng cách sử dụng quy trình song song.
Quét chỉ mục B-cây
Thao tác này quét qua một cây dữ liệu được sắp xếp để tìm thông tin cụ thể. Quá trình này mất nhiều thời gian hơn so với quá trình quét tuần tự điển hình vì có rất nhiều thời gian chờ đợi trong khi tìm kiếm bản ghi. Tuy nhiên, công việc quét tìm dữ liệu thích hợp được phân chia giữa nhiều bộ xử lý.
Quét đống bitmap
Bạn có thể hợp nhất nhiều chỉ mục bằng cách sử dụng thao tác này. Trước tiên, bạn muốn tạo số lượng bitmap tương đương, vì bạn có các chỉ mục. Ví dụ:nếu bạn có ba chỉ mục, trước tiên bạn phải tạo ba bitmap. Mỗi bitmap sẽ tìm nạp và biên dịch các bộ giá trị dựa trên truy vấn.
Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thứcSong song phân vùng
Có một dạng song song khác có thể diễn ra trong cơ sở dữ liệu PostgreSQL. Tuy nhiên, nó không đến từ việc quét bảng và chia nhỏ các nhiệm vụ. Bạn có thể phân vùng hoặc chia dữ liệu theo các giá trị cụ thể. Ví dụ:bạn có thể lấy những người mua có giá trị và có một quá trình cốt lõi duy nhất chỉ xử lý dữ liệu trong giá trị đó. Bằng cách đó, bạn biết chính xác những gì mỗi lõi đang xử lý tại bất kỳ thời điểm nào.
Phân vùng băm
Thao tác này được sử dụng bằng cách trải các hàng trong bảng thành các bảng con. Một lần nữa, phép chia thường được xác định bởi một giá trị hoặc danh sách giá trị riêng biệt từ một bảng. Đây là một phương pháp tuyệt vời để sử dụng Nếu bạn không có kỹ thuật quản lý lưu trữ hiệu quả trên tất cả các thiết bị của mình. Bạn muốn sử dụng tính năng phân vùng để phân phối dữ liệu một cách ngẫu nhiên nhằm tránh tắc nghẽn I / O.
Tham gia theo phân vùng
Một kỹ thuật được sử dụng để chia nhỏ các bảng theo các phân vùng và nối chúng bằng cách kết hợp các phân vùng tương tự với nhau. Ví dụ:bạn có thể có một lượng lớn người mua từ khắp Hoa Kỳ. Trước tiên, bạn có thể chia nhỏ bảng theo các thành phố khác nhau và sau đó nối một số thành phố lại với nhau dựa trên khu vực ở mỗi bang. Tham gia phân vùng khôn ngoan đơn giản hóa dữ liệu của bạn và cho phép thao tác các bảng diễn ra.
Không an toàn song song
PostgreSQL 11 tự động thực hiện song song truy vấn nếu trình tối ưu hóa xác định rằng đây là cách nhanh nhất để hoàn thành truy vấn. Phiên bản PostgreSQL bạn đang sử dụng càng cao thì cơ sở dữ liệu của bạn càng có nhiều khả năng song song. Thật không may, không phải tất cả các truy vấn nên được thực hiện theo cách song song, ngay cả khi nó có khả năng. Loại truy vấn bạn đang thực hiện có thể có những giới hạn cụ thể và nó sẽ yêu cầu chỉ một lõi hoàn thành tất cả quá trình xử lý. Điều này sẽ làm chậm hiệu suất của hệ thống của bạn, nhưng nó sẽ đảm bảo rằng dữ liệu nhận được là toàn bộ.
Để đảm bảo rằng các truy vấn của bạn không bao giờ gặp rủi ro, các nhà phát triển đã tạo ra một chức năng được gọi là không an toàn song song. Bạn có thể ghi đè thủ công trình tối ưu hóa cơ sở dữ liệu và yêu cầu truy vấn không bao giờ song song. Quá trình song song sẽ không được thực hiện.
Song song trong cơ sở dữ liệu PostgreSQL là một tính năng chỉ trở nên tốt hơn với mỗi phiên bản cơ sở dữ liệu. Mặc dù tương lai của công nghệ là không chắc chắn, nhưng có vẻ như việc sử dụng tính năng này vẫn tiếp tục tồn tại.
Để biết thêm thông tin, bạn có thể xem phần sau ...
- https://www.postgresql.org/docs/10/parallel-query.html
- https://www.postgresql.org/docs/10/how-parallel-query-works.html
- https://www.bbc.com/news/business-42797846
- https://www.technologyreview.com/s/421186/why-cpus-arent-getting-any-faster/
- https://www.percona.com/blog/2019/02/21/parallel-queries-in-postgresql/
- https://malisper.me/postgres-merge-joins/
- https://www.enterprisedb.com/blog/partition-wise-joins-osystemdivide-and-conquer-joins-between-partitioned-table