PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kueri postgres dalam produksi menghasilkan I/O pembacaan disk yang sangat tinggi

Kueri ini tidak menghasilkan I/O disk apa pun – semua blok dibaca dari buffer bersama. Tetapi karena kueri membaca 73424 blok (sekitar 574 MB), kueri akan menghasilkan beban I/O yang substansial saat tabel tidak di-cache.

Tapi ada dua hal yang bisa diperbaiki.

  • Anda memiliki kecocokan blok yang kalah dalam pemindaian tumpukan. Artinya work_mem tidak cukup besar untuk memuat bitmap dengan bit per baris tabel, dan 26592 bit memetakan blok tabel sebagai gantinya. Semua baris harus diperiksa ulang, dan 86733 baris dibuang, sebagian besar merupakan hasil positif palsu dari kecocokan blok lossy.

    Jika Anda meningkatkan work_mem , bitmap dengan bit per baris tabel akan masuk ke memori, dan jumlah ini akan menyusut, mengurangi pekerjaan selama pemindaian heap.

  • 190108 baris dibuang karena tidak cocok dengan kondisi filter tambahan dalam pemindaian heap bitmap. Ini mungkin di mana sebagian besar waktu dihabiskan. Jika Anda dapat mengurangi jumlah itu, Anda akan menang.

    Indeks yang ideal untuk kueri ini adalah:

    CREATE INDEX ON map_listing(transaction_type, la);
    CREATE INDEX ON map_listing(transaction_type, lo);
    

    Jika transaction_type tidak terlalu selektif (yaitu, sebagian besar baris memiliki nilai Sale ), Anda dapat menghilangkan kolom tersebut.

EDIT:

Pemeriksaan vmstat dan iostat menunjukkan bahwa baik CPU dan subsistem I/O mengalami kelebihan beban yang sangat besar:semua sumber daya CPU dihabiskan untuk menunggu I/O dan VM mencuri waktu. Anda memerlukan sistem I/O yang lebih baik dan sistem host dengan lebih banyak sumber daya CPU gratis. Meningkatkan RAM mungkin mengurangi masalah I/O, tetapi hanya untuk pembacaan disk.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. melakukan operasi terkait datetime di PHP

  2. Bagaimana cara bergabung dengan elemen array jsonb di Postgres?

  3. Bidang kenaikan dengan batasan bukan nol dan unik di PostgreSQL 8.3

  4. Bagaimana cara menjatuhkan database template dari PostgreSQL?

  5. Runtime.getRuntime().exec untuk meneruskan parameter saat diminta