PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wspólna pamięć podręczna trafień w postgreSQL

shared hit zasadniczo oznacza to, że wartość została już zbuforowana w pamięci głównej komputera i nie było potrzeby jej odczytywania z dysku twardego.

Dostęp do pamięci głównej (RAM) to dużo szybciej niż odczytywanie wartości z dysku twardego. I dlatego zapytanie jest tym szybsze, im więcej ma trafień dotyczących udostępniania.

Zaraz po uruchomieniu Postgresa żadne dane nie są dostępne w pamięci głównej (RAM) i wszystko trzeba odczytać z dysku twardego.

Rozważ ten krok z planu wykonania:

  ->  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

Część "Bufory:współdzielony odczyt=2818" oznacza, że ​​2818 bloków (każdy po 8k) musiało zostać odczytanych z dysku twardego (a to zajęło 48ms - mam dysk SSD). Te 2818 bloków było przechowywanych w pamięci podręcznej ("bufory wspólne "), aby następnym razem, gdy są potrzebne, baza danych nie musi ich (ponownie) odczytywać z (powolnego) dysku twardego.

Kiedy ponownie uruchomię to oświadczenie, plan zmieni się na:

  ->  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

Co oznacza, że ​​te 2818 bloków, które poprzednia instrukcja wciąż znajdowała się w pamięci głównej (=RAM), a Postgres nie musiał ich odczytywać z dysku twardego.

„pamięć” zawsze odnosi się do pamięci głównej (RAM) wbudowanej w komputer i bezpośrednio dostępnej dla procesora – w przeciwieństwie do „pamięci zewnętrznej”.

Istnieje kilka prezentacji na temat tego, jak Postgres zarządza współdzielonymi buforami:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uporządkować dane w sqlalchemy według listy

  2. Jak wykonać podzapytanie Postgresql w klauzuli select z klauzulą ​​Join in from, taką jak SQL Server?

  3. Zmienić schemat wielu funkcji PostgreSQL w jednej operacji?

  4. Jak mogę przekonwertować wszystkie kolumny w mojej bazie danych na niewrażliwe na wielkość liter?

  5. Jak tworzyć trwałe pliki w Heroku?