inflearn logo

PostgreSQL thực chiến dành cho nhà phát triển chỉ từng dùng MySQL — học bằng cách tự tái hiện MVCC·VACUUM·kế hoạch thực thi·chỉ mục

Nếu bạn từng xây dựng dịch vụ bằng MySQL, hãy chạy song song cùng một câu lệnh SQL trên MySQL 8.4 và PostgreSQL 17 để trực tiếp kiểm chứng 40 điểm khác biệt qua các câu lệnh thực tế: UPDATE khiến bảng phình to gấp 4 lần, mức cô lập mặc định khác nhau, lỗi tuần tự hóa 40001, khóa không có khóa khoảng, kế hoạch thực thi được đọc dưới dạng cây, cùng các chỉ mục một phần/GIN/BRIN.

1 học viên đang tham gia khóa học này

Độ khó Trung cấp trở lên

Thời gian Không giới hạn

PostgreSQL
PostgreSQL
MySQL
MySQL
SQL
SQL
DBMS/RDBMS
DBMS/RDBMS
database
database
PostgreSQL
PostgreSQL
MySQL
MySQL
SQL
SQL
DBMS/RDBMS
DBMS/RDBMS
database
database

Bạn sẽ nhận được điều này sau khi học.

  • Dùng danh sách kiểm tra để xác định những điểm trong truy vấn và DDL được chuyển từ MySQL nhưng hoạt động khác trong PostgreSQL (so sánh chữ hoa chữ thường, số, UPSERT, chuyển đổi kiểu dữ liệu, múi giờ và giao dịch DDL).

  • Giải thích vì sao bảng phình to bằng cách xem các bản ghi về tuple chết và autovacuum, đồng thời tìm và chấm dứt các giao dịch kéo dài đang cản trở việc dọn dẹp.

  • Trong cùng một kịch bản, tìm hiểu các mức cô lập và cách khóa khiến kết quả khác với MySQL, đồng thời xác định nơi cần thêm mã thử lại 40001.

  • Đọc EXPLAIN (ANALYZE, BUFFERS) dưới dạng cây và dùng số liệu để chỉ ra nguyên nhân thống kê lỗi thời, phương thức JOIN và thất bại của Index Only Scan.

  • Chọn phương án phù hợp giữa chỉ mục partial, expression, INCLUDE, GIN, BRIN và phân vùng; tạo an toàn trên môi trường production bằng CONCURRENTLY.

Vì sao những điều vốn hiển nhiên trong MySQL lại hoạt động khác trong PostgreSQL? Hãy chạy cùng một câu lệnh SQL trên cả hai hệ quản trị để tự mình kiểm chứng.

Nếu bạn từng xây dựng dịch vụ bằng MySQL, hãy chạy cùng một câu SQL trên MySQL 8.4 và PostgreSQL 17 để trực tiếp kiểm chứng qua kết quả thực thi nguyên bản 40 điểm khác biệt: UPDATE khiến bảng phình to gấp 4 lần, mức cô lập mặc định khác nhau, lỗi tuần tự hóa 40001, khóa không có khóa khoảng trống, kế hoạch thực thi được đọc dưới dạng cây, cùng các chỉ mục partial/GIN/BRIN.

Phần lớn các khóa học về PostgreSQL chỉ dừng lại ở việc giới thiệu cú pháp và tính năng. Khóa học này lấy kinh nghiệm với MySQL làm điểm xuất phát, chạy cùng dữ liệu và cùng câu lệnh SQL trên cả hai hệ quản trị để cho thấy qua từng tình huống, chúng hoạt động khác nhau ra sao. Nội dung tập trung vào cách vận hành của hệ quản trị có thể dẫn đến sự cố trong môi trường thực tế, như phiên bản hàng và VACUUM, mức độ cô lập và khóa, kế hoạch thực thi, chỉ mục. Khóa học cũng chia sẻ trình tự kiểm tra mà trưởng nhóm DBA tại một doanh nghiệp thương mại điện tử lớn áp dụng khi vận hành cả hai hệ quản trị.

Sau khi hoàn thành khóa học này

  • Dùng bảng kiểm để phát hiện những điểm mà truy vấn và DDL chuyển từ MySQL sang hoạt động khác trong PostgreSQL (so sánh chữ hoa chữ thường, số thứ tự, UPSERT, chuyển đổi kiểu, múi giờ, giao dịch DDL).

  • Giải thích nguyên nhân bảng phình to dựa trên các tuple chết và nhật ký autovacuum, đồng thời tìm và chấm dứt các giao dịch kéo dài đang cản trở việc dọn dẹp.

  • Trong cùng một kịch bản, hiểu các mức độ cô lập và cách hoạt động của khóa khiến kết quả khác với MySQL, đồng thời xác định nơi cần thêm mã thử lại 40001.

  • Đọc EXPLAIN (ANALYZE, BUFFERS) dưới dạng cây và dùng số liệu để xác định nguyên nhân thống kê lỗi thời, cách kết hợp bảng và Index Only Scan thất bại.

  • Chọn phương án phù hợp trong các loại chỉ mục bộ phận, chỉ mục biểu thức, INCLUDE, GIN, BRIN và phân vùng; sau đó tạo chúng an toàn trong môi trường vận hành bằng CONCURRENTLY.

Phù hợp với những người sau đây

  • Lập trình viên backend đã từng xây dựng dịch vụ bằng MySQL(InnoDB) và nay phụ trách PostgreSQL do tham gia dự án mới hoặc chuyển việc.

  • Các nhóm đang cân nhắc hoặc triển khai chuyển đổi từ MySQL sang PostgreSQL.

  • Dành cho những ai đã hoàn thành khóa học nhập môn PostgreSQL và muốn tìm hiểu sâu về cách thức hoạt động của engine.

Chương trình học (6 phần · 40 bài · khoảng 292 phút)

  • Phần 1. Cùng một SQL, kết quả khác nhau — Cùng một câu lệnh UPDATE, bảng lớn gấp 4 lần, khác biệt ngay từ bước kết nối — Cơ sở dữ liệu, schema và role — Số thứ tự và kiểu dữ liệu — IDENTITY thay cho AUTO_INCREMENT, phân biệt chữ hoa chữ thường và chuỗi rỗng — Cùng một WHERE, số lượng bản ghi khác nhau, UPSERT và ép kiểu — SQL bị lỗi khi chuyển đổi, sắp xếp NULL và phân trang, múi giờ — DATETIME và timestamptz

  • Phần 2. MVCC và VACUUM — nơi lưu các hàng khác nhau — phiên bản hàng được lưu ở đâu — nằm trong bảng thay vì undo, tuple chết và kích thước bảng, VACUUM và VACUUM FULL khác nhau, giao dịch dài ngăn cản việc dọn dẹp, đọc nhật ký autovacuum, cập nhật HOT và fillfactor, chỉ mục cũng phình to — REINDEX, hãy theo dõi tuổi của ID giao dịch.

  • Phần 3. Giao dịch và khóa — cùng mức cô lập, kết quả khác nhau — mức cô lập mặc định khác nhau, cùng REPEATABLE READ nhưng kết cục khác nhau — 40001, không có khóa khoảng trống — thay vào đó là SERIALIZABLE, FOR UPDATE·NOWAIT·SKIP LOCKED, khóa ứng dụng — advisory lock, DDL cũng được rollback — và hàng chờ khóa, ba cơ chế bảo vệ bằng timeout, đọc thông báo deadlock

  • Phần 4. Kế hoạch thực thi — đọc bằng cây và chứng minh bằng số liệu — Đọc EXPLAIN dưới dạng cây, EXPLAIN (ANALYZE, BUFFERS), thống kê cũ làm hỏng kế hoạch, điều kiện liên kết giữa các cột — thống kê mở rộng, phương thức JOIN — Nested Loop·Hash·Merge, không có chỉ mục phân cụm — heap và Index Only Scan, chi phí của COUNT và OFFSET sâu, tìm truy vấn chậm bằng pg_stat_statements

  • Phần 5. Chỉ mục và phân vùng — những lựa chọn không có trong MySQL — Chỉ mục từng phần — chỉ lấy những hàng cần thiết, chỉ mục biểu thức — lower(email), chỉ mục kết hợp và INCLUDE, GIN và JSONB, BRIN — nhật ký dung lượng lớn theo trình tự thời gian, phân vùng khai báo và loại trừ phân vùng, CREATE INDEX CONCURRENTLY

  • Mục 6. Khi chuyển đổi — Một kết nối tương ứng với một tiến trình, tổng kết: danh sách kiểm tra khi chuyển từ MySQL sang PostgreSQL

Môi trường thực hành

Khởi chạy MySQL 8.4 và PostgreSQL 17 thành một cặp bằng Docker, rồi nạp vào cả hai cùng một bộ dữ liệu cửa hàng trực tuyến giả lập (10.000 khách hàng, 1.000 sản phẩm, 200.000 đơn hàng). Mỗi bài học đều có thể tái hiện nguyên màn hình bài giảng chỉ bằng một lệnh `./scenarios/sNN.sh`. Tất cả con số, thông báo lỗi và kế hoạch thực thi trên màn hình bài giảng đều là kết quả thu được khi chạy thực tế bài thực hành này.

Kiến thức tiên quyết

  • Có kinh nghiệm làm việc với bảng, chỉ mục và giao dịch trong MySQL.

  • Phép JOIN trong SQL

  • Máy tính đã cài đặt Docker (khuyến nghị phân bổ ít nhất 4 GB bộ nhớ)

Những nội dung không được đề cập trong khóa học này

  • Bắt đầu từ đầu với cú pháp SQL cơ bản

  • Vận hành máy chủ như sao chép dữ liệu, tính sẵn sàng cao, sao lưu và nâng cấp phiên bản lớn.

  • Cấu hình cơ sở dữ liệu được quản lý trên đám mây

  • Ánh xạ ORM

Hướng dẫn

Lời thuyết minh trong slide được tạo bằng giọng nói tổng hợp. Tất cả dữ liệu đều là dữ liệu mô phỏng phục vụ đào tạo, các con số có thể thay đổi tùy theo môi trường thực thi.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Lập trình viên backend từng xây dựng dịch vụ bằng MySQL (InnoDB), nay phụ trách PostgreSQL trong dự án mới hoặc sau khi chuyển việc.

  • Đội ngũ đang xem xét và triển khai việc chuyển đổi từ MySQL sang PostgreSQL

  • Dành cho những người đã hoàn thành khóa học nhập môn PostgreSQL và muốn tìm hiểu sâu hơn về cách thức hoạt động của engine.

Cần biết trước khi bắt đầu?

  • Kinh nghiệm làm việc với bảng, chỉ mục và giao dịch bằng MySQL

  • Phép nối SQL

  • Máy tính đã cài đặt Docker (khuyến nghị cấp phát ít nhất 4 GB bộ nhớ)

Xin chào
Đây là dorian05202988

Xác minh sự nghiệp

Tôi là một chuyên gia dữ liệu với hơn 20 năm kinh nghiệm trong lĩnh vực cơ sở dữ liệu và CNTT. Trong vai trò DBA và quản lý nhóm Nền tảng Cơ sở dữ liệu, tôi phụ trách các nền tảng cơ sở dữ liệu, với chuyên môn về MySQL, PostgreSQL, Oracle, MongoDB, tinh chỉnh SQL, AWS, Terraform và Python. Dựa trên kinh nghiệm trong các lĩnh vực trò chơi, tài chính và dịch vụ CNTT, tôi trình bày về cơ sở dữ liệu và kiến trúc đám mây. Tôi đã xuất bản 『Học các mẫu SQL tinh chỉnh thực tế Oracle』 và 『Sổ tay ứng dụng dự án thực tế Oracle Pro*C』, đồng thời thuyết trình về serverless, lựa chọn cơ sở dữ liệu và chiến lược đa cơ sở dữ liệu tại AWS Summit 2018·2019 và sự kiện 데이터야 놀자 2020. Gần đây, tôi tập trung vào phân tích và khuyến nghị tinh chỉnh truy vấn chậm bằng Bedrock LLM, tự động hóa việc tính toán thông số DB, cũng như quy trình tra cứu thông qua máy chủ DB Meta MCP và bot Slack. Tôi giải thích về tự động hóa cơ sở dữ liệu dành cho nhà phát triển và việc ứng dụng AI vào công việc dành cho người không chuyên về phát triển thông qua các bài thực hành phù hợp với đối tượng và mục tiêu của từng khóa học. Thay vì áp dụng nguyên xi các đề xuất của AI, tôi truyền đạt các tiêu chí đánh giá như kiểm tra tính tương đương của kết quả, kế hoạch thực thi và điều kiện quan sát; nếu thiếu căn cứ thì tạm thời chưa áp dụng. Dữ liệu vận hành của công ty và thông tin xác thực không được đưa vào tài liệu giảng dạy.

Thêm

Chương trình giảng dạy

Tất cả

40 bài giảng ∙ (4giờ 52phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Chưa có đủ đánh giá.
Hãy trở thành tác giả của một đánh giá giúp mọi người!

Khóa học khác của dorian05202988

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Ưu đãi có thời hạn

1.159.150 ₫

19%

1.448.937 ₫