PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

அரை வருடம் முன்பு நாங்கள் வழங்கினோம் விளக்கவும்.tensor.ru - பொது வினவல் திட்டங்களை பாகுபடுத்துவதற்கும் காட்சிப்படுத்துவதற்கும் சேவை PostgreSQL க்கு.

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

கடந்த மாதங்களில் நாங்கள் அவரைப் பற்றி செய்துள்ளோம் PGConf.Russia 2020 இல் அறிக்கை, ஒரு சுருக்கம் தயார் SQL வினவல்களை விரைவுபடுத்தும் கட்டுரை அது தரும் பரிந்துரைகளின் அடிப்படையில்... ஆனால் மிக முக்கியமாக, உங்கள் கருத்தைச் சேகரித்து உண்மையான பயன்பாட்டு நிகழ்வுகளைப் பார்த்தோம்.

இப்போது நீங்கள் பயன்படுத்தக்கூடிய புதிய அம்சங்களைப் பற்றி உங்களுக்குச் சொல்லத் தயாராக உள்ளோம்.

வெவ்வேறு திட்ட வடிவங்களுக்கான ஆதரவு

கோரிக்கையுடன் பதிவில் இருந்து திட்டமிடுங்கள்

கன்சோலில் இருந்து நேரடியாக, வரியிலிருந்து தொடங்கி முழு தொகுதியையும் தேர்ந்தெடுக்கிறோம் கேள்வி உரை, அனைத்து முன்னணி இடைவெளிகளுடன்:

        Query Text: INSERT INTO  dicquery_20200604  VALUES ($1.*) ON CONFLICT (query)
                           DO NOTHING;
        Insert on dicquery_20200604  (cost=0.00..0.05 rows=1 width=52) (actual time=40.376..40.376 rows=0 loops=1)
          Conflict Resolution: NOTHING
          Conflict Arbiter Indexes: dicquery_20200604_pkey
          Tuples Inserted: 1
          Conflicting Tuples: 0
          Buffers: shared hit=9 read=1 dirtied=1
          ->  Result  (cost=0.00..0.05 rows=1 width=52) (actual time=0.001..0.001 rows=1 loops=1)

... மற்றும் எதையும் பிரிக்காமல், திட்டத்திற்காக நேரடியாக நகலெடுக்கப்பட்ட அனைத்தையும் களத்தில் எறியுங்கள்:

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

வெளியீட்டில், பிரிக்கப்பட்ட திட்டத்திற்கு போனஸையும் பெறுகிறோம் சூழல் தாவல், எங்கள் கோரிக்கை அதன் அனைத்து மகிமையிலும் வழங்கப்படுகிறது:

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

JSON மற்றும் YAML

EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)
SELECT * FROM pg_class;

"[
  {
    "Plan": {
      "Node Type": "Seq Scan",
      "Parallel Aware": false,
      "Relation Name": "pg_class",
      "Alias": "pg_class",
      "Startup Cost": 0.00,
      "Total Cost": 1336.20,
      "Plan Rows": 13804,
      "Plan Width": 539,
      "Actual Startup Time": 0.006,
      "Actual Total Time": 1.838,
      "Actual Rows": 10266,
      "Actual Loops": 1,
      "Shared Hit Blocks": 646,
      "Shared Read Blocks": 0,
      "Shared Dirtied Blocks": 0,
      "Shared Written Blocks": 0,
      "Local Hit Blocks": 0,
      "Local Read Blocks": 0,
      "Local Dirtied Blocks": 0,
      "Local Written Blocks": 0,
      "Temp Read Blocks": 0,
      "Temp Written Blocks": 0
    },
    "Planning Time": 5.135,
    "Triggers": [
    ],
    "Execution Time": 2.389
  }
]"

வெளிப்புற மேற்கோள்களுடன் கூட, pgAdmin நகல்களாக, இல்லாவிட்டாலும் - நாங்கள் அதே துறையில் வீசுகிறோம், வெளியீடு அழகு:

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

மேம்பட்ட காட்சிப்படுத்தல்

திட்டமிடல் நேரம் / செயல்படுத்தும் நேரம்

வினவலை இயக்கும்போது கூடுதல் நேரம் எங்கு சென்றது என்பதை இப்போது நீங்கள் நன்றாகப் பார்க்கலாம்:

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

I/O டைமிங்

சில நேரங்களில் நீங்கள் ஒரு சூழ்நிலையைச் சமாளிக்க வேண்டியிருக்கும், ஆதாரங்களின் அடிப்படையில், அதிகமாகப் படிக்கவில்லை மற்றும் எழுதப்படவில்லை என்று தோன்றுகிறது, ஆனால் சில காரணங்களால் செயல்படுத்தும் நேரம் பொருத்தமற்றதாக இருப்பதாகத் தெரிகிறது.

அதை இங்கே சொல்ல வேண்டும்:ஓ, அநேகமாக, அந்த நேரத்தில் சர்வரில் உள்ள வட்டு அதிக சுமையாக இருந்தது, அதனால்தான் படிக்க இவ்வளவு நேரம் ஆனது!"ஆனால் எப்படியோ அது மிகவும் துல்லியமாக இல்லை ...

ஆனால் அதை முற்றிலும் நம்பகத்தன்மையுடன் தீர்மானிக்க முடியும். உண்மை என்னவென்றால், பிஜி சேவையகத்தின் உள்ளமைவு விருப்பங்களில் உள்ளன track_io_timing:

நேரமான I/O செயல்பாடுகளை இயக்குகிறது. இந்த அமைப்பு முன்னிருப்பாக முடக்கப்பட்டுள்ளது, ஏனெனில் இயக்க முறைமைக்கு தற்போதைய நேரத்தை தொடர்ந்து வினவ வேண்டும், இது சில தளங்களில் விஷயங்களை கணிசமாகக் குறைக்கும். உங்கள் பிளாட்ஃபார்மில் நேரத்தின் மேல்நிலையை மதிப்பிட pg_test_timing பயன்பாட்டைப் பயன்படுத்தலாம். I/O புள்ளிவிவரங்களை pg_stat_database காட்சி மூலம் பெறலாம், விளக்க வெளியீட்டில் (BUFFERS அளவுரு பயன்படுத்தப்படும் போது) மற்றும் pg_stat_statements காட்சி மூலம்.

இந்த விருப்பத்தை உள்ளூர் அமர்விலும் இயக்கலாம்:

SET track_io_timing = TRUE;

சரி, இப்போது சிறந்த பகுதி என்னவென்றால், மரணதண்டனை மரத்தின் அனைத்து மாற்றங்களையும் கணக்கில் எடுத்துக்கொண்டு, இந்தத் தரவைப் புரிந்துகொள்ளவும் காண்பிக்கவும் கற்றுக்கொண்டோம்:

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

மொத்த செயலாக்க நேரத்தின் 0.790ms இல், 0.718ms ஒரு பக்கத் தரவைப் படித்து, 0.044ms - அதை எழுத, மற்ற எல்லா பயனுள்ள செயல்களுக்கும் 0.028ms மட்டுமே செலவிடப்பட்டதை இங்கே காணலாம்!

PostgreSQL 13 உடன் எதிர்காலம்

புதியவை பற்றிய முழுமையான கண்ணோட்டத்திற்கு, பார்க்கவும் ஒரு விரிவான கட்டுரையில், மற்றும் திட்டங்களில் ஏற்படும் மாற்றங்களைப் பற்றி நாங்கள் குறிப்பாகப் பேசுகிறோம்.

திட்டமிடல் இடையகங்கள்

திட்டமிடுபவருக்கு ஒதுக்கப்பட்ட ஆதாரங்களுக்கான கணக்கியல், pg_stat_statementகளுடன் தொடர்பில்லாத மற்றொரு இணைப்பில் பிரதிபலிக்கிறது. BUFFERS விருப்பத்துடன் விளக்கவும், திட்டமிடல் கட்டத்தில் பயன்படுத்தப்படும் இடையகங்களின் எண்ணிக்கையைப் புகாரளிக்கும்:

 Seq Scan on pg_class (actual rows=386 loops=1)
   Buffers: shared hit=9 read=4
 Planning Time: 0.782 ms
   Buffers: shared hit=103 read=11
 Execution Time: 0.219 ms

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

அதிகரிக்கும் வரிசை

பல விசைகள் (k1, k2, k3...) மூலம் வரிசைப்படுத்த வேண்டிய சந்தர்ப்பங்களில், தரவு ஏற்கனவே பல முதல் விசைகளால் (எ.கா. k1 மற்றும் k2) வரிசைப்படுத்தப்பட்டுள்ளது என்பதைத் திட்டமிடுபவர் இப்போது பயன்படுத்திக் கொள்ளலாம். இந்த வழக்கில், நீங்கள் எல்லா தரவையும் புதிதாக வரிசைப்படுத்த முடியாது, ஆனால் அவற்றை k1 மற்றும் k2 இன் அதே மதிப்புகளுடன் அடுத்தடுத்த குழுக்களாகப் பிரித்து, அவற்றை k3 விசையால் "மீண்டும் வரிசைப்படுத்தவும்".

இவ்வாறு, முழு வரிசையாக்கமும் சிறிய அளவிலான பல தொடர்ச்சியான வரிசைப்படுத்தல்களாக உடைகிறது. இது தேவையான நினைவகத்தின் அளவைக் குறைக்கிறது, மேலும் அனைத்து வரிசையாக்கமும் முடிவதற்குள் முதல் தரவைத் திரும்பப் பெற உங்களை அனுமதிக்கிறது.

 Incremental Sort (actual rows=2949857 loops=1)
   Sort Key: ticket_no, passenger_id
   Presorted Key: ticket_no
   Full-sort Groups: 92184 Sort Method: quicksort Memory: avg=31kB peak=31kB
   ->  Index Scan using tickets_pkey on tickets (actual rows=2949857 loops=1)
 Planning Time: 2.137 ms
 Execution Time: 2230.019 ms

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது
PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

UI/UX மேம்பாடுகள்

ஸ்கிரீன்ஷாட்கள் எல்லா இடங்களிலும் உள்ளன!

இப்போது ஒவ்வொரு தாவலிலும் விரைவாக ஒரு வாய்ப்பு உள்ளது கிளிப்போர்டுக்கு டேப்பின் ஸ்கிரீன்ஷாட்டை எடுக்கவும் தாவலின் முழு அகலம் மற்றும் ஆழத்திற்கு - "பார்வை" வலது-மேல்:

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

உண்மையில், இந்த வெளியீட்டிற்கான பெரும்பாலான படங்கள் இந்த வழியில் பெறப்பட்டன.

முனைகளில் பரிந்துரைகள்

அவற்றில் அதிகமானவை மட்டுமல்ல, ஒவ்வொன்றையும் பற்றி உங்களால் முடியும் கட்டுரையை விரிவாக படிக்கவும்இணைப்பைப் பின்தொடர்வதன் மூலம்:

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

காப்பகத்திலிருந்து நீக்குகிறது

சிலர் திறன் கேட்டுள்ளனர் "முற்றிலும்" நீக்கு காப்பகத்தில் வெளியிடப்படாத திட்டங்கள் கூட - தயவுசெய்து, தொடர்புடைய ஐகானைக் கிளிக் செய்யவும்:

PostgreSQL வினவல் திட்டங்களை இன்னும் வசதியாகப் புரிந்துகொள்வது

சரி, நம்மிடம் இருக்கிறது என்பதை மறந்து விடாதீர்கள் ஆதரவு குழுஉங்கள் கருத்துகளையும் பரிந்துரைகளையும் எழுதலாம்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்