Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

புரூஸ் மோம்ஜியனின் 2020 பேச்சு "போஸ்ட்கிரெஸ் பூட்டு மேலாளரைத் திறத்தல்".

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

(குறிப்பு: ஸ்லைடுகளில் இருந்து அனைத்து SQL வினவல்களையும் இந்த இணைப்பில் இருந்து பெறலாம்: http://momjian.us/main/writings/pgsql/locking.sql)

வணக்கம்! ரஷ்யாவில் மீண்டும் வந்திருப்பது மகிழ்ச்சி அளிக்கிறது. போன வருஷம் வரமுடியாமல் போனதுக்கு வருத்தமா இருக்கு, இந்த வருஷம் இவனுக்கும் எனக்கும் பெரிய பிளான் இருக்கு. நான் அடிக்கடி இங்கு வருவேன் என்று நம்புகிறேன். நான் ரஷ்யாவிற்கு வர விரும்புகிறேன். நான் Tyumen, Tver ஐ பார்வையிடுவேன். இந்த நகரங்களுக்குச் செல்ல முடிந்ததில் நான் மிகவும் மகிழ்ச்சியடைகிறேன்.

என் பெயர் புரூஸ் மோம்ஜியன். நான் EnterpriseDB இல் பணிபுரிகிறேன் மற்றும் 23 ஆண்டுகளுக்கும் மேலாக Postgres உடன் பணிபுரிகிறேன். நான் அமெரிக்காவின் பிலடெல்பியாவில் வசிக்கிறேன். வருடத்தில் 90 நாட்கள் பயணம் செய்கிறேன். நான் சுமார் 40 மாநாடுகளில் கலந்துகொள்கிறேன். என் இணையதளம், நான் இப்போது உங்களுக்குக் காண்பிக்கும் ஸ்லைடுகளைக் கொண்டுள்ளது. எனவே, மாநாட்டிற்குப் பிறகு நீங்கள் அவற்றை எனது தனிப்பட்ட வலைத்தளத்திலிருந்து பதிவிறக்கம் செய்யலாம். இது சுமார் 30 விளக்கக்காட்சிகளையும் கொண்டுள்ளது. வீடியோக்கள் மற்றும் அதிக எண்ணிக்கையிலான வலைப்பதிவு உள்ளீடுகளும் உள்ளன, 500 க்கும் அதிகமானவை. இது மிகவும் தகவலறிந்த ஆதாரமாகும். இந்த விஷயத்தில் நீங்கள் ஆர்வமாக இருந்தால், அதைப் பயன்படுத்த உங்களை அழைக்கிறேன்.

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

தடுப்பதைப் பற்றி பேசலாம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

என்னைக் குழப்பும் சொற்களை இங்கே காண்கிறோம். எடுத்துக்காட்டாக, ஷேர் அப்டேட் EXXLUSIVE. அடுத்தது RAW EXXLUSIVE ஐ பகிரவும். உண்மையைச் சொல்வதானால், இந்த பெயர்கள் மிகவும் தெளிவாக இல்லை. அவற்றை இன்னும் விரிவாகக் கருத்தில் கொள்ள முயற்சிப்போம். சிலவற்றில் "பங்கு" என்ற வார்த்தை உள்ளது, அதாவது பிரித்தல். சிலவற்றில் "பிரத்தியேக" என்ற வார்த்தை உள்ளது. சில இந்த இரண்டு சொற்களையும் கொண்டிருக்கின்றன. இந்த பூட்டுகள் எவ்வாறு செயல்படுகின்றன என்பதை நான் தொடங்க விரும்புகிறேன்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மேலும் "அணுகல்" என்ற வார்த்தையும் மிகவும் முக்கியமானது. மற்றும் வார்த்தைகள் "வரிசை" ஒரு சரம். அதாவது, அணுகல் விநியோகம், வரிசை விநியோகம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நாம் புரிந்து கொள்ள வேண்டிய மற்றொரு விஷயம் பரிவர்த்தனை ஐடிகள். தனிப்பட்ட அடையாளங்காட்டிகள் இல்லாமல் பல பரிவர்த்தனைகள் இயங்காது. பரிவர்த்தனை என்றால் என்ன என்பதற்கான விளக்கம் இங்கே உள்ளது. Postgres இரண்டு பரிவர்த்தனை எண் அமைப்புகளைக் கொண்டுள்ளது. இது மிகவும் அழகான தீர்வு அல்ல என்று எனக்குத் தெரியும்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

http://momjian.us/main/writings/pgsql/locking.sql

பார்க்கலாம். பரிவர்த்தனை எண் சிவப்பு நிறத்தில் காட்டப்பட்டுள்ளது. SELECT pg_back செயல்பாடு இங்கே காட்டப்பட்டுள்ளது. இது எனது பரிவர்த்தனை மற்றும் பரிவர்த்தனை ஐடியைத் திருப்பித் தருகிறது.

இன்னும் ஒரு விஷயம், இந்த விளக்கக்காட்சியை நீங்கள் விரும்பி, உங்கள் தரவுத்தளத்தில் இயக்க விரும்பினால், நீங்கள் இளஞ்சிவப்பு நிறத்தில் உள்ள இந்த இணைப்பிற்குச் சென்று இந்த விளக்கக்காட்சிக்கான SQL ஐப் பதிவிறக்கலாம். நீங்கள் அதை உங்கள் PSQL இல் இயக்கலாம் மற்றும் முழு விளக்கக்காட்சியும் உடனடியாக உங்கள் திரையில் தோன்றும். அதில் பூக்கள் இருக்காது, ஆனால் குறைந்தபட்சம் நாம் அதைப் பார்க்க முடியும்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இந்த வழக்கில் பரிவர்த்தனை ஐடியைப் பார்க்கிறோம். இது நாங்கள் அவளுக்கு ஒதுக்கிய எண். போஸ்ட்கிரெஸில் மற்றொரு வகையான பரிவர்த்தனை ஐடி உள்ளது, இது மெய்நிகர் பரிவர்த்தனை ஐடி என்று அழைக்கப்படுகிறது

மேலும் இதை நாம் புரிந்து கொள்ள வேண்டும். இது மிகவும் முக்கியமானது, இல்லையெனில் Postgres இல் பூட்டுவதை நாம் புரிந்து கொள்ள முடியாது.

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

இது போஸ்ட்கிரெஸ் செயல்திறனை மேம்படுத்துகிறது, சுத்தம் செய்யும் திறன்களை மேம்படுத்துகிறது, எனவே மெய்நிகர் பரிவர்த்தனை ஐடி இரண்டு எண்களைக் கொண்டுள்ளது. ஸ்லாஷிற்கு முன் உள்ள முதல் எண் பின்தள ஐடி ஆகும். வலதுபுறத்தில் ஒரு கவுண்டரைக் காண்கிறோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

எனவே, நான் ஒரு கோரிக்கையை இயக்கினால், பின்தள ஐடி 2 என்று கூறுகிறது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மேலும் இதுபோன்ற பரிவர்த்தனைகளை நான் தொடர்ச்சியாக நடத்தினால், ஒவ்வொரு முறையும் நான் வினவலை இயக்கும் போது கவுண்டர் அதிகரிப்பதைக் காண்கிறோம். எடுத்துக்காட்டாக, நான் 2/10, 2/11, 2/12 போன்ற வினவலை இயக்கும்போது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இங்கே இரண்டு நெடுவரிசைகள் உள்ளன என்பதை நினைவில் கொள்க. இடதுபுறத்தில் மெய்நிகர் பரிவர்த்தனை ஐடி - 2/12 ஐக் காண்கிறோம். வலதுபுறத்தில் நிரந்தர பரிவர்த்தனை ஐடி உள்ளது. மேலும் இந்த புலம் காலியாக உள்ளது. இந்த பரிவர்த்தனை தரவுத்தளத்தை மாற்றாது. அதனால் நான் அதற்கு நிரந்தர பரிவர்த்தனை ஐடியை வழங்கவில்லை.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நான் பகுப்பாய்வு கட்டளையை ((பகுப்பாய்வு) இயக்கியவுடன், அதே வினவல் எனக்கு நிரந்தர பரிவர்த்தனை ஐடியை வழங்குகிறது. இது நமக்கு எப்படி மாறிவிட்டது என்று பாருங்கள். என்னிடம் இதற்கு முன் இந்த ஐடி இல்லை, ஆனால் இப்போது என்னிடம் உள்ளது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

எனவே இங்கே மற்றொரு கோரிக்கை, மற்றொரு பரிவர்த்தனை. மெய்நிகர் பரிவர்த்தனை எண் 2/13. நான் நிலையான பரிவர்த்தனை ஐடியைக் கேட்டால், வினவலை இயக்கும்போது, ​​அதைப் பெறுவேன்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

எனவே, இன்னும் ஒரு முறை. எங்களிடம் விர்ச்சுவல் பரிவர்த்தனை ஐடி மற்றும் நிலையான பரிவர்த்தனை ஐடி உள்ளது. போஸ்ட்கிரெஸ் நடத்தையைப் புரிந்து கொள்ள இந்த புள்ளியைப் புரிந்து கொள்ளுங்கள்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

வினவலை உருவாக்க மற்றும் Postgres இல் என்ன நடக்கிறது என்பதைப் பார்க்க, கணினி பார்வையில் வினவலை வழங்க வேண்டும். இந்த வழக்கில், pg_lock சிவப்பு நிறத்தில் சிறப்பிக்கப்படுகிறது. Pg_lock என்பது போஸ்ட்கிரெஸில் தற்போது என்னென்ன பூட்டுகள் பயன்பாட்டில் உள்ளன என்பதைக் கூறும் கணினி அட்டவணை.

இருப்பினும், pg_lock மிகவும் சிக்கலானதாக இருப்பதால், அதையே உங்களுக்குக் காட்டுவது எனக்கு மிகவும் கடினமாக உள்ளது. எனவே pg_locks ஐக் காட்டும் காட்சியை உருவாக்கினேன். மேலும் இது எனக்கு சில வேலைகளைச் செய்கிறது, அது என்னை நன்றாகப் புரிந்துகொள்ள அனுமதிக்கிறது. அதாவது, எனது பூட்டுகள், எனது சொந்த அமர்வு போன்றவற்றை இது விலக்குகிறது. இது நிலையான SQL தான், மேலும் என்ன நடக்கிறது என்பதை உங்களுக்கு சிறப்பாகக் காட்ட இது உங்களை அனுமதிக்கிறது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மற்றொரு சிக்கல் என்னவென்றால், இந்த பார்வை மிகவும் விரிவானது, எனவே நான் இரண்டாவது ஒன்றை உருவாக்க வேண்டும் - lockview2.

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

எனவே, ஒரு வரிசை, ஒரு நெடுவரிசை. முதல் வகை பூட்டுக்கு ACCESS SHARE என்று பெயர். இது மிகக் குறைவான தடையாகும். இது நடைமுறையில் மற்ற பூட்டுகளுடன் முரண்படாது என்பதாகும்.

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நான் "SELECT" கட்டளையை இயக்கினால், AccessShareLock ஐக் கோருவதற்கான மறைமுகமான (வெளிப்படையான) வழி இதுவாகும். எனவே நான் எனது அட்டவணையை வெளியிட்டு வினவலை இயக்குகிறேன் மற்றும் வினவல் பல வரிசைகளை வழங்குகிறது. மற்றும் ஒரு வரியில் நாம் AccessShareLock ஐக் காண்கிறோம். இவ்வாறு, SELECT டேபிளில் உள்ள AccessShareLock ஐ அழைக்கிறது. மேலும் இது குறைந்த அளவிலான பூட்டு என்பதால் கிட்டத்தட்ட எதனுடனும் முரண்படாது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நான் SELECT ஐ இயக்கி மூன்று வெவ்வேறு அட்டவணைகளை வைத்திருந்தால் என்ன செய்வது? முன்பு நான் ஒரு அட்டவணையை மட்டுமே இயக்கி வந்தேன், இப்போது pg_class, pg_namespace மற்றும் pg_attribute ஆகிய மூன்றை இயக்குகிறேன்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இப்போது நான் வினவலைப் பார்க்கும்போது, ​​மூன்று அட்டவணைகளில் 9 AccessShareLocks ஐக் காண்கிறேன். ஏன்? மூன்று அட்டவணைகள் நீல நிறத்தில் தனிப்படுத்தப்பட்டுள்ளன: pg_attribute, pg_class, pg_namespace. ஆனால் இந்த அட்டவணைகள் மூலம் வரையறுக்கப்பட்ட அனைத்து குறியீடுகளும் AccessShareLock இருப்பதையும் நீங்கள் பார்க்கலாம்.

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

ரோ ஷேர் - இந்த பூட்டு கொஞ்சம் வித்தியாசமானது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்எனவே SHARE LOCK என்ன செய்கிறது? SELECTக்கான பரிவர்த்தனை ஐடி 681 ஆக இருப்பதைக் காண்கிறோம். மேலும் இது சுவாரஸ்யமானது. இங்கே என்ன நடந்தது? முதன்முதலில் எண்ணை "பூட்டு" புலத்தில் பார்க்கிறோம். நாங்கள் பரிவர்த்தனை ஐடியை எடுத்துக்கொள்கிறோம், அது பிரத்யேக பயன்முறையில் அதைத் தடுப்பதாகக் கூறுகிறது. தொழில்நுட்ப ரீதியாக அட்டவணையில் எங்காவது பூட்டப்பட்ட ஒரு வரிசை என்னிடம் உள்ளது என்று அது கூறுகிறது. ஆனால் எங்கே என்று அவர் சரியாகச் சொல்லவில்லை. இதைப் பற்றி சிறிது நேரம் கழித்துப் பார்ப்போம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

பூட்டை நாம் பயன்படுத்துகிறோம் என்று இங்கே சொல்கிறோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

SHARE EXCLUSIVE என்பது நீண்ட பூட்டு.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இது பயன்படுத்தப்படும் (பகுப்பாய்வு) பகுப்பாய்வி கட்டளை.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

ஷேர் லாக் - நீங்கள் வெளிப்படையாகப் பங்கு முறையில் பூட்டலாம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நீங்கள் ஒரு தனிப்பட்ட குறியீட்டை உருவாக்கலாம். மேலும் அங்கு ஷேர் லாக் பார்க்க முடியும். மேலும் அது டேபிளைப் பூட்டி அதன் மீது ஷேர் லாக் போடுகிறது.

இயல்பாக, டேபிளில் உள்ள ஷேர் லாக் என்றால் மற்றவர்கள் டேபிளைப் படிக்கலாம், ஆனால் அதை யாராலும் மாற்ற முடியாது. நீங்கள் ஒரு தனித்துவமான குறியீட்டை உருவாக்கும்போது இதுதான் நடக்கும்.

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

ஷேர் ரோ எக்ஸ்க்ளூசிவ் - மீண்டும் அதை வெளிப்படையாக (வெளிப்படையாக) அமைக்கலாம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

அல்லது நாம் ஒரு விதியை உருவாக்கலாம், அதாவது, அது பயன்படுத்தப்படும் ஒரு குறிப்பிட்ட வழக்கை எடுத்துக் கொள்ளலாம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

EXCLUSIVE locking என்றால் வேறு யாரும் அட்டவணையை மாற்ற முடியாது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இங்கு பல்வேறு வகையான பூட்டுகளைப் பார்க்கிறோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இது ACCESS EXCLUSIVE பிளாக்கிங்கின் இரண்டாவது பக்கமாகும், இது அட்டவணையில் எதைத் தடுக்கிறது என்பதைப் பார்க்கிறோம். இது தனிப்பட்ட அட்டவணை வரிசைகளை பூட்டுகிறது, இது மிகவும் சுவாரஸ்யமானது.

நான் கொடுக்க விரும்பிய அடிப்படை தகவல்கள் அவ்வளவுதான். பூட்டுகள் பற்றி, பரிவர்த்தனை ஐடிகள் பற்றி பேசினோம், மெய்நிகர் பரிவர்த்தனை ஐடிகள் பற்றி, நிரந்தர பரிவர்த்தனை ஐடிகள் பற்றி பேசினோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

சில குறிப்பிட்ட உதாரணங்களைப் பார்ப்போம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

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

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நான் எதையாவது நீக்க விரும்பினால் என்ன செய்வது? நான் நீக்கினால், எடுத்துக்காட்டாக, ஒரு வரிசை மற்றும் என்னிடம் இன்னும் இரண்டு தடுக்கும் உள்ளீடுகள் உள்ளன, மேலும் அவை அனைத்தையும் நீக்க விரும்பினாலும், அவை இன்னும் உள்ளன.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

வெளிப்படையான தடுப்பு பற்றி என்ன?

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நான் புதுப்பி என்பதைக் கிளிக் செய்தால், இரண்டு வரிசைகள் பூட்டப்பட்டிருக்கும். நான் அனைத்தையும் தேர்ந்தெடுத்து "எல்லா இடங்களிலும் புதுப்பி" என்பதைக் கிளிக் செய்தால், இன்னும் இரண்டு தடுப்பு பதிவுகள் என்னிடம் உள்ளன.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

அதே விஷயம், நாம் பகிர்ந்தால், அதை 30 முறை செய்யலாம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நாங்கள் எங்கள் அட்டவணையை மீட்டெடுக்கிறோம், எல்லாவற்றையும் நீக்கிவிட்டு, மீண்டும் ஒரு வரிசையைச் செருகுவோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

இதற்கு ஒரு உதாரணம் காட்டுகிறேன். நான் இப்போது ஒரு தேர்வு செய்வேன். பின்னர் INSERT செய்வோம். பின்னர் நீங்கள் பார்க்கலாம் - 694. இந்தச் செருகலைச் செய்த பரிவர்த்தனையின் ஐடியை நீங்கள் பார்க்கலாம். அது எப்படி வேலை செய்கிறது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நான் இப்போது எனது பின்தள ஐடியைப் பார்த்தால், அது இப்போது 695 ஆக உள்ளது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

எனது அட்டவணையில் 695 தோன்றுவதை என்னால் பார்க்க முடிகிறது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

மேலும் மேலே ஷேர்லாக் இருப்பதையும், கீழே எக்ஸ்க்ளூசிவ்லாக் என்பதையும் பார்க்கலாம். மேலும் இரண்டு பரிவர்த்தனைகளும் செயல்பட்டன.

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

ரீசெட் செய்து இன்னும் ஒரு ஆபரேஷன் செய்வோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இதை விளக்குவதற்கு, நான் லாக்டெமோ அட்டவணையைப் பார்க்கிறேன். நாம் ஒரு வரிசையைப் பார்ப்போம். ஒரு பரிவர்த்தனைக்கு 698.

இதை 2 ஆக புதுப்பித்துள்ளோம். 699 முதல் புதுப்பிப்பு. அது வெற்றிகரமாக இருந்தது அல்லது அது நிலுவையில் உள்ள பரிவர்த்தனையில் உள்ளது மற்றும் நாங்கள் உறுதிப்படுத்த அல்லது ரத்து செய்ய காத்திருக்கிறோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

ஆனால் வேறு ஒன்றைப் பாருங்கள் - 2/51 எங்கள் முதல் பரிவர்த்தனை, எங்கள் முதல் அமர்வு. 3/112 என்பது மேலே இருந்து வந்த இரண்டாவது கோரிக்கையாகும், அந்த மதிப்பை 3 ஆக மாற்றியது. நீங்கள் கவனித்தால், மேலே உள்ள ஒன்று தன்னைப் பூட்டிக்கொண்டது, அதாவது 699. ஆனால் 3/112 பூட்டை வழங்கவில்லை. Lock_mode நெடுவரிசை அது எதற்காகக் காத்திருக்கிறது என்பதைக் கூறுகிறது. இது 699 ஐ எதிர்பார்க்கிறது. மேலும் 699 எங்கே என்று பார்த்தால், அது அதிகமாகும். முதல் அமர்வு என்ன செய்தது? அவர் தனது சொந்த பரிவர்த்தனை ஐடியில் ஒரு பிரத்யேக பூட்டை உருவாக்கினார். Postgres இதை இப்படித்தான் செய்கிறது. இது அதன் சொந்த பரிவர்த்தனை ஐடியைத் தடுக்கிறது. யாரோ ஒருவர் உறுதிப்படுத்த அல்லது ரத்துசெய்யும் வரை நீங்கள் காத்திருக்க விரும்பினால், பரிவர்த்தனை நிலுவையில் இருக்கும் வரை நீங்கள் காத்திருக்க வேண்டும். அதனால்தான் ஒரு விசித்திரமான வரியைக் காணலாம்.

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

இங்கே என்ன நடக்கிறது என்று பார்க்கிறேன். இங்கே இரண்டு விஷயங்கள் ஒரே நேரத்தில் நடக்கின்றன. முதல் வரிசையில் உள்ள பரிவர்த்தனை ஐடி பூட்டைப் பார்க்கிறீர்கள். மக்களைக் காத்திருக்கச் செய்ய அவள் தன்னைத் தடுக்கிறாள்.

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மற்றும் lock_typeல், tuple இல் நீங்கள் எண்களைக் காண்பீர்கள்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

0/10 என்பதை நீங்கள் பார்க்கலாம். இது பக்க எண் மற்றும் இந்த குறிப்பிட்ட வரிசையின் ஆஃப்செட் ஆகும்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நாங்கள் புதுப்பிக்கும்போது அது 0/11 ஆக மாறுவதை நீங்கள் காண்கிறீர்கள்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

ஆனால் உண்மையில் இது 0/10 ஆகும், ஏனெனில் இந்த செயல்பாட்டிற்கு காத்திருப்பு உள்ளது. நான் உறுதிப்படுத்தக் காத்திருக்கும் தொடர் இது என்பதை நாங்கள் பார்க்க வாய்ப்பு உள்ளது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

ஒரே நேரத்தில் மூன்று புதுப்பிப்புகளைச் செய்து, வரிசை இப்போது மூன்று என்று சொன்னால் என்ன செய்வது. மேலும் 3 முதல் 4 வரை மாற்றுவோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இங்கே நாம் 4. மற்றும் பரிவர்த்தனை ஐடி 702 ஐக் காண்கிறோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

பின்னர் நான் 4 முதல் 5 வரை மாற்றுவேன். மற்றும் 5 முதல் 6, மற்றும் 6 முதல் 7 வரை. இந்த ஒரு பரிவர்த்தனை முடிவடையும் வரை காத்திருக்கும் பல நபர்களை நான் வரிசைப்படுத்துவேன்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மேலும் எல்லாம் தெளிவாகிறது. முதல் வரிசை என்ன? இது 702. இந்த மதிப்பை முதலில் அமைத்த பரிவர்த்தனை ஐடி இதுதான். எனது கிராண்டட் பத்தியில் என்ன எழுதப்பட்டுள்ளது? எனக்கு மதிப்பெண்கள் உள்ளன f. பரிவர்த்தனை ஐடி 5 முடிவடையும் வரை நாங்கள் காத்திருப்பதால் (6, 7, 702) அங்கீகரிக்க முடியாத எனது புதுப்பிப்புகள் இவை. அங்கு எங்களிடம் பரிவர்த்தனை ஐடி தடுப்பு உள்ளது. இது 5 பரிவர்த்தனை ஐடி பூட்டுகளில் விளைகிறது.

நீங்கள் 704 ஐப் பார்த்தால், 705 இல், இன்னும் எதுவும் எழுதப்படவில்லை, ஏனென்றால் அவர்களுக்கு இன்னும் என்ன நடக்கிறது என்று தெரியவில்லை. என்ன நடக்கிறது என்று தங்களுக்குத் தெரியாது என்று வெறுமனே எழுதுகிறார்கள். மேலும் வரிசைகளை மாற்றும் வாய்ப்பு கிடைக்கும்போது யாராவது முடித்துவிட்டு எழுப்பப்படுவார்கள் என்று காத்திருப்பதால் அவர்கள் தூங்கச் செல்வார்கள்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இப்படித்தான் தெரிகிறது. அவர்கள் அனைவரும் 12வது வரிக்காக காத்திருக்கிறார்கள் என்பது தெளிவாகிறது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இதைத்தான் இங்கு பார்த்தோம். இதோ 0/12.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

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

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இப்போது நாம் இரண்டு முட்டுக்கட்டைகளை நிறுவுவோம். 50 மற்றும் 80ஐ வைப்போம். முதல் வரிசையில், 50ல் இருந்து 50க்கு அப்டேட் செய்கிறேன். எனக்கு பரிவர்த்தனை எண் 710 கிடைக்கும்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

பின்னர் நான் 80 ஐ 81 ஆகவும், 50 ஐ 51 ஆகவும் மாற்றுவேன்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மேலும் இது இப்படித்தான் இருக்கும். எனவே 710 வரிசை தடுக்கப்பட்டுள்ளது, மேலும் 711 உறுதிப்படுத்தலுக்காக காத்திருக்கிறது. நாங்கள் புதுப்பிக்கும்போது இதைப் பார்த்தோம். 710 எங்கள் தொடரின் உரிமையாளர். மற்றும் 711 பரிவர்த்தனையை முடிக்க 710 காத்திருக்கிறது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

எந்த வரிசையில் முட்டுக்கட்டைகள் ஏற்படுகின்றன என்று கூட அது கூறுகிறது. இங்கே அது விசித்திரமாகத் தொடங்குகிறது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இப்போது 80 முதல் 80 வரை புதுப்பிக்கிறோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

அது எல்லாவற்றையும் தாமதப்படுத்த ஆரம்பிக்கும். நாங்கள் அதை விரும்பவில்லை.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

போஸ்ட்கிரெஸ் இது நடக்கும் போது கவனிக்க வழிகள் உள்ளன. இது நிகழும்போது, ​​​​நீங்கள் இந்த பிழையைப் பெறுவீர்கள். இதிலிருந்து இதுபோன்ற மற்றும் அத்தகைய செயல்முறை மற்றொரு செயல்முறையிலிருந்து ஒரு SHARE LOCK க்காக காத்திருக்கிறது என்பது தெளிவாகிறது, அதாவது 711 செயல்முறையால் தடுக்கப்பட்டது. அத்தகைய பரிவர்த்தனை ஐடியில் ஷேர் லாக் வழங்கப்படுவதற்கு அந்த செயல்முறை காத்திருந்தது, மேலும் இது போன்ற ஒரு செயல்முறையால் தடுக்கப்பட்டது. அதனால், இங்கு முட்டுக்கட்டையான சூழல் நிலவுகிறது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மூன்று வழி முட்டுக்கட்டைகள் உள்ளதா? இது முடியுமா? ஆம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இந்த எண்களை அட்டவணையில் உள்ளிடுகிறோம். நாங்கள் 40 ஐ 40 ஆக மாற்றுகிறோம், நாங்கள் தடுப்பதைச் செய்கிறோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நாங்கள் 60 ஐ 61 ஆகவும், 80 ஐ 81 ஆகவும் மாற்றுகிறோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

பின்னர் நாம் 80 ஐ மாற்றி பின்னர் ஏற்றம்!

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மேலும் 714 இப்போது 715க்காக காத்திருக்கிறது. 716வது 715வதுக்காக காத்திருக்கிறது. மேலும் இதில் எதுவும் செய்ய முடியாது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

அடுத்த பிரச்சனை தொடர்கதை.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

சிறப்பு வரிசைப்படுத்தக்கூடிய பூட்டு என்றால்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

நாம் 719 க்கு திரும்புவோம். அதன் வெளியீடு மிகவும் சாதாரணமானது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

பரிவர்த்தனையை வரிசையாக்கம் செய்ய நீங்கள் கிளிக் செய்யலாம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

எனவே எங்களிடம் SARieadLock என்ற புதிய வகை பூட்டு உள்ளது, இது ஒரு தொடர் பூட்டு மற்றும் தொடர்களில் நுழைய உங்களை அனுமதிக்கிறது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மேலும் நீங்கள் தனிப்பட்ட குறியீடுகளைச் செருகலாம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இந்த அட்டவணையில் தனித்துவமான குறியீடுகள் உள்ளன.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மற்றும் நாம் கழித்தல் செய்தால்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இங்கே 723 உள்ளது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இது pg_advisory_lock கொண்ட வெளிப்படையான (வெளிப்படையான) பூட்டுகளின் உருவாக்கம் ஆகும்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

முடிவில், மனதைக் கவரும் இன்னொரு விஷயத்தையும் உங்களுக்குக் காட்ட விரும்புகிறேன். நான் மற்றொரு காட்சியை உருவாக்குகிறேன். ஆனால் நான் pg_stat_activity அட்டவணையுடன் pg_locks அட்டவணையில் இணைவேன். நான் ஏன் இதை செய்ய வேண்டும்? ஏனென்றால், தற்போதைய அனைத்து அமர்வுகளையும் பார்க்கவும் பார்க்கவும், அவை எந்த வகையான பூட்டுகளுக்காக காத்திருக்கின்றன என்பதைப் பார்க்கவும் இது என்னை அனுமதிக்கும். பூட்டு அட்டவணை மற்றும் வினவல் அட்டவணையை ஒன்றாக இணைக்கும்போது இது மிகவும் சுவாரஸ்யமானது.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இங்கே நாம் pg_stat_view ஐ உருவாக்குகிறோம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

மிகவும் பயனுள்ள மற்றொரு அம்சம் pg_blocking_pids. நீங்கள் அவளைப் பற்றி கேள்விப்பட்டிருக்க மாட்டீர்கள். அவள் என்ன ெசய்கிறாள்? இந்த அமர்வு 11740 க்கு அது எந்த குறிப்பிட்ட செயல்முறை ஐடிகளுக்காக காத்திருக்கிறது என்று சொல்ல அனுமதிக்கிறது. 11740க்கு 724 காத்திருப்பதை நீங்கள் காணலாம். மேலும் 724 மிகவும் மேலே உள்ளது. மேலும் 11306 என்பது உங்கள் செயல்முறை ஐடி. அடிப்படையில், இந்த செயல்பாடு உங்கள் பூட்டு அட்டவணை வழியாக செல்கிறது. இது கொஞ்சம் சிக்கலானது என்று எனக்குத் தெரியும், ஆனால் நீங்கள் அதை புரிந்து கொள்ள முடிகிறது. முக்கியமாக இந்தச் செயல்பாடு இந்தப் பூட்டு அட்டவணை வழியாகச் சென்று, இந்தச் செயல்முறை ஐடிக்கு அது காத்திருக்கும் பூட்டுகள் எங்கே கொடுக்கப்பட்டுள்ளன என்பதைக் கண்டறிய முயற்சிக்கும். பூட்டுக்காக காத்திருக்கும் செயல்முறை எந்த செயல்முறை ஐடியைக் கொண்டுள்ளது என்பதைக் கண்டறியவும் இது முயற்சிக்கிறது. எனவே நீங்கள் இந்த செயல்பாட்டை இயக்கலாம் pg_blocking_pids.

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

இதைத்தான் நான் உங்களிடம் பேச விரும்பினேன். நான் எதிர்பார்த்தபடி, பல ஸ்லைடுகள் இருந்ததால், நாங்கள் எங்கள் நேரத்தைப் பயன்படுத்தினோம். மற்றும் ஸ்லைடுகள் பதிவிறக்கம் செய்ய கிடைக்கின்றன. நான் இங்கே இருந்ததற்கு நன்றி சொல்ல விரும்புகிறேன். மாநாட்டின் மீதியை நீங்கள் ரசிப்பீர்கள் என்று நான் நம்புகிறேன், மிக்க நன்றி!

கேள்விகள்:

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

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

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

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

இது பூட்டு பிரத்தியேகமாக இருக்கும், இல்லையா?

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

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

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

Postgres தானாக முட்டுக்கட்டை நிலைகளை கவனிக்கிறது. அது தானாகவே அமர்வுகளில் ஒன்றை நீக்கிவிடும். டெட் பிளாக்கிங்கைத் தவிர்க்க ஒரே வழி, ஒரே வரிசையில் மக்களைத் தடுப்பதுதான். எனவே உங்கள் விண்ணப்பத்தைப் பார்க்கும்போது, ​​பெரும்பாலும் முட்டுக்கட்டைகளுக்குக் காரணம்... நான் இரண்டு வெவ்வேறு விஷயங்களைத் தடுக்க விரும்புகிறேன் என்று கற்பனை செய்து கொள்வோம். ஒரு பயன்பாடு அட்டவணை 1 ஐப் பூட்டுகிறது, மேலும் மற்றொரு பயன்பாடு 2 ஐப் பூட்டுகிறது, பின்னர் அட்டவணை 1 ஐப் பூட்டுகிறது. மேலும் முட்டுக்கட்டைகளைத் தவிர்ப்பதற்கான எளிதான வழி, உங்கள் பயன்பாட்டைப் பார்த்து, எல்லா பயன்பாடுகளிலும் ஒரே வரிசையில் பூட்டப்படுவதை உறுதிசெய்வது. இது பொதுவாக 80% சிக்கல்களை நீக்குகிறது, ஏனென்றால் எல்லா வகையான மக்களும் இந்த பயன்பாடுகளை எழுதுகிறார்கள். நீங்கள் அவர்களை அதே வரிசையில் தடுத்தால், நீங்கள் ஒரு முட்டுக்கட்டை நிலைமையை சந்திக்க மாட்டீர்கள்.

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

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

போஸ்ட்கிரெஸில் பூட்டுதல் காலக்கெடுவைச் சேர்க்க முடியுமா? ஆரக்கிளில், எடுத்துக்காட்டாக, "புதுப்பிக்க தேர்ந்தெடு" என்று எழுதி, புதுப்பிப்பதற்கு முன் 50 வினாடிகள் காத்திருக்க முடியும். இது விண்ணப்பத்திற்கு நன்றாக இருந்தது. ஆனால் போஸ்ட்கிரெஸில், நான் அதை உடனே செய்ய வேண்டும், காத்திருக்காமல் இருக்க வேண்டும் அல்லது சிறிது நேரம் காத்திருக்க வேண்டும்.

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

ஸ்லைடு 75 ஐ திறக்க முடியுமா?

ஆமாம்.

Postgres பூட்டு மேலாளரைத் திறக்கிறது. புரூஸ் மோம்ஜியன்

மேலும் எனது கேள்வி பின்வருமாறு. இரண்டு புதுப்பிப்பு செயல்முறைகளும் ஏன் 703 ஐ எதிர்பார்க்கின்றன?

மேலும் இது ஒரு பெரிய கேள்வி. போஸ்ட்கிரெஸ் இதை ஏன் செய்கிறார் என்று எனக்குப் புரியவில்லை. ஆனால் 703 உருவாக்கப்பட்டபோது, ​​அது 702 ஐ எதிர்பார்த்தது. மேலும் 704 மற்றும் 705 தோன்றும் போது, ​​அவர்கள் என்ன எதிர்பார்க்கிறார்கள் என்பது அவர்களுக்குத் தெரியாது, ஏனெனில் அங்கு எதுவும் இல்லை. போஸ்ட்கிரெஸ் இதை இப்படிச் செய்கிறார்: நீங்கள் ஒரு பூட்டைப் பெற முடியாதபோது, ​​"உங்களைச் செயலாக்குவதில் என்ன பயன்?" என்று எழுதுகிறது, ஏனென்றால் நீங்கள் ஏற்கனவே யாருக்காகவோ காத்திருக்கிறீர்கள். எனவே அதை காற்றில் தொங்க விடுவோம், அது புதுப்பிக்காது. ஆனால் இங்கு என்ன நடந்தது? 702 செயல்முறையை முடித்து, 703 அதன் பூட்டைப் பெற்றவுடன், கணினி திரும்பியது. இப்போது எங்களிடம் இரண்டு பேர் காத்திருக்கிறார்கள் என்று அவள் சொன்னாள். பின்னர் அவற்றை ஒன்றாக புதுப்பிப்போம். இருவரும் எதிர்பார்க்கிறார்கள் என்பதைக் குறிப்பிடுவோம்.

போஸ்ட்கிரெஸ் ஏன் இதைச் செய்கிறார் என்று எனக்குத் தெரியவில்லை. ஆனால் f என்று ஒரு பிரச்சனை இருக்கிறது.... இது ரஷ்ய மொழியில் ஒரு சொல் அல்ல என்று எனக்குத் தோன்றுகிறது. ஒரு கோட்டைக்கு 20 அதிகாரிகள் காத்திருந்தாலும், எல்லோரும் ஒரு கோட்டைக்காக காத்திருக்கும் போது இதுதான். திடீரென்று அவர்கள் அனைவரும் ஒரே நேரத்தில் எழுந்திருக்கிறார்கள். மேலும் எல்லோரும் எதிர்வினையாற்ற முயற்சிக்கிறார்கள். ஆனால், அனைவரும் 703க்காக காத்திருக்கும் வகையில் இந்த அமைப்பு உள்ளது. ஏனென்றால் அவர்கள் அனைவரும் காத்திருக்கிறார்கள், நாங்கள் உடனடியாக அனைவரையும் வரிசைப்படுத்துவோம். இதற்குப் பிறகு உருவாக்கப்பட்ட வேறு ஏதேனும் புதிய கோரிக்கை தோன்றினால், எடுத்துக்காட்டாக, 707, மீண்டும் வெறுமையாக இருக்கும்.

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

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

705 704 ஐ எதிர்பார்க்கும் போது இது மிகவும் தர்க்கரீதியானது என்று எனக்குத் தோன்றுகிறது.

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

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

உள்ளன எகோர் ரோகோவ் எழுதிய பூட்டுகள் பற்றிய கட்டுரைகள். பாருங்கள், அவை சுவாரஸ்யமானவை மற்றும் பயனுள்ளவை. தலைப்பு, நிச்சயமாக, மிகவும் சிக்கலானது. மிக்க நன்றி, புரூஸ்!

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

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