PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Споделен кеш за попадения в postgreSQL

shared hit по същество означава, че стойността вече е била кеширана в основната памет на компютъра и не е било необходимо да се чете това от твърдия диск.

Достъпът до основната памет (RAM) е многомного по-бързо от четене на стойности от твърдия диск. И затова заявката е толкова по-бърза, колкото повече споделяния има.

Веднага след стартиране на Postgres, нито една от данните не е налична в основната памет (RAM) и всичко трябва да се прочете от твърдия диск.

Помислете за тази стъпка от план за изпълнение:

  ->  Seq Scan on products.product_price  (cost=0.00..3210.27 rows=392273 width=0) (actual time=0.053..103.958 rows=392273 loops=1)
        Output: product_id, valid_from, valid_to, price
        Buffers: shared read=2818
        I/O Timings: read=48.382

Частта "Буфери:споделено четене=2818" означава, че 2818 блока (всеки 8k) трябваше да бъдат прочетени от твърдия диск (и това отне 48ms - имам SSD). Тези 2818 блока бяха съхранени в кеша ("споделени буфери "), така че следващия път, когато са необходими, базата данни не трябва да ги чете (отново) от (бавния) твърд диск.

Когато стартирам отново този оператор, планът се променя на:

  ->  Seq Scan on products.product_price  (cost=0.00..3210.27 rows=392273 width=0) (actual time=0.012..45.690 rows=392273 loops=1)
        Output: product_id, valid_from, valid_to, price
        Buffers: shared hit=2818

Което означава, че тези 2818 блока, които предишният оператор все още бяха в основната памет (=RAM) и Postgres не трябваше да ги чете от твърдия диск.

"памет" винаги се отнася до основната памет (RAM), вградена в компютъра и директно достъпна за процесора - за разлика от "външна памет".

Има няколко презентации за това как Postgres управлява споделените буфери:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на множество POSTGRES бази данни и схеми с един и същ модел Flask-SQLAlchemy

  2. Как да съхраня настройките за целия сайт в база данни?

  3. PostgreSQL nextval и currval в една и съща заявка

  4. Изчисляване на разстоянието между GPS местоположение и географската стойност на postgis с помощта на функция?

  5. Изчислете резултата от месечните периодични приходи (MRR) с помощта на postgres