బ్రూస్ మోమ్జియాన్ యొక్క 2020 చర్చ "అన్లాకింగ్ ది పోస్ట్గ్రెస్ లాక్ మేనేజర్" యొక్క ట్రాన్స్క్రిప్ట్.
(గమనిక: స్లయిడ్ల నుండి అన్ని SQL ప్రశ్నలను ఈ లింక్ నుండి పొందవచ్చు:
హలో! రష్యాలో మళ్లీ ఇక్కడకు రావడం గొప్ప విషయం. క్షమించండి, నేను గత సంవత్సరం రాలేకపోయాను, కానీ ఈ సంవత్సరం ఇవాన్ మరియు నాకు పెద్ద ప్రణాళికలు ఉన్నాయి. నేను చాలా తరచుగా ఇక్కడ ఉండాలని ఆశిస్తున్నాను. నేను రష్యాకు రావడం ఇష్టం. నేను Tyumen, Tver సందర్శిస్తాను. నేను ఈ నగరాలను సందర్శించగలిగినందుకు చాలా సంతోషిస్తున్నాను.
నా పేరు బ్రూస్ మోమ్జియాన్. నేను EnterpriseDBలో పని చేస్తున్నాను మరియు పోస్ట్గ్రెస్తో 23 సంవత్సరాలుగా పని చేస్తున్నాను. నేను USAలోని ఫిలడెల్ఫియాలో నివసిస్తున్నాను. నేను సంవత్సరానికి 90 రోజులు ప్రయాణిస్తాను. నేను దాదాపు 40 సమావేశాలకు హాజరవుతున్నాను. నా
నేను పోస్ట్గ్రెస్తో పనిచేయడానికి ముందు నేను ఉపాధ్యాయుడిగా, ప్రొఫెసర్గా ఉండేవాడిని. మరియు నేను మీకు ఏమి చెప్పబోతున్నానో ఇప్పుడు నేను మీకు చెప్పగలిగినందుకు నేను చాలా సంతోషిస్తున్నాను. ఇది నా అత్యంత ఆసక్తికరమైన ప్రదర్శనలలో ఒకటి. మరియు ఈ ప్రదర్శనలో 110 స్లయిడ్లు ఉన్నాయి. మేము సాధారణ విషయాలతో మాట్లాడటం ప్రారంభిస్తాము మరియు చివరికి నివేదిక మరింత క్లిష్టంగా మారుతుంది మరియు చాలా క్లిష్టంగా మారుతుంది.
ఇది చాలా అసహ్యకరమైన సంభాషణ. నిరోధించడం అనేది అత్యంత ప్రజాదరణ పొందిన అంశం కాదు. ఇది ఎక్కడో కనుమరుగు కావాలని మేము కోరుకుంటున్నాము. దంతవైద్యుని వద్దకు వెళ్లడం లాంటిది.
- డేటాబేస్లలో పని చేసే మరియు ఒకే సమయంలో బహుళ ప్రక్రియలు నడుస్తున్న చాలా మందికి లాక్ చేయడం సమస్య. వారికి నిరోధించడం అవసరం. అంటే, ఈ రోజు నేను మీకు నిరోధించడంపై ప్రాథమిక జ్ఞానాన్ని ఇస్తాను.
- లావాదేవీ IDలు. ఇది ప్రదర్శనలో చాలా బోరింగ్ భాగం, కానీ వాటిని అర్థం చేసుకోవాలి.
- తరువాత మనం నిరోధించే రకాలు గురించి మాట్లాడుతాము. ఇది చాలా మెకానికల్ భాగం.
- మరియు క్రింద మేము నిరోధించే కొన్ని ఉదాహరణలు ఇస్తాము. మరియు అర్థం చేసుకోవడం చాలా కష్టం అవుతుంది.
అడ్డుకోవడం గురించి మాట్లాడుకుందాం.
మన పరిభాష చాలా క్లిష్టంగా ఉంటుంది. ఈ ప్రకరణం ఎక్కడి నుండి వచ్చిందో మీలో ఎంతమందికి తెలుసు? ఇద్దరు మనుషులు. ఇది కోలోసల్ కేవ్ అడ్వెంచర్ అనే గేమ్లోనిది. ఇది 80లలో టెక్స్ట్ ఆధారిత కంప్యూటర్ గేమ్ అని నేను అనుకుంటున్నాను. అక్కడ మీరు ఒక గుహలోకి, చిక్కైన లోపలికి వెళ్లవలసి ఉంటుంది మరియు వచనం మార్చబడింది, కానీ కంటెంట్ ప్రతిసారీ దాదాపు ఒకే విధంగా ఉంటుంది. ఈ ఆట నాకు అలా గుర్తుంది.
మరియు ఇక్కడ మేము ఒరాకిల్ నుండి మాకు వచ్చిన తాళాల పేరును చూస్తాము. మేము వాటిని ఉపయోగిస్తాము.
ఇక్కడ మనం నన్ను గందరగోళపరిచే నిబంధనలను చూస్తాము. ఉదాహరణకు, షేర్ అప్డేట్ EXXLUSIVE. తదుపరి షేర్ రా ఎక్స్లూజివ్. నిజం చెప్పాలంటే, ఈ పేర్లు చాలా స్పష్టంగా లేవు. మేము వాటిని మరింత వివరంగా పరిగణించడానికి ప్రయత్నిస్తాము. కొన్ని "భాగస్వామ్యం" అనే పదాన్ని కలిగి ఉంటాయి, అంటే వేరు చేయడం. కొన్ని "ప్రత్యేకమైనవి" అనే పదాన్ని కలిగి ఉంటాయి. కొన్ని ఈ రెండు పదాలను కలిగి ఉంటాయి. ఈ తాళాలు ఎలా పని చేస్తాయో నేను ప్రారంభించాలనుకుంటున్నాను.
మరియు "యాక్సెస్" అనే పదం కూడా చాలా ముఖ్యమైనది. మరియు "వరుస" అనే పదాలు ఒక స్ట్రింగ్. అంటే యాక్సెస్ డిస్ట్రిబ్యూషన్, రో డిస్ట్రిబ్యూషన్.
పోస్ట్గ్రెస్లో అర్థం చేసుకోవలసిన మరో సమస్య, దురదృష్టవశాత్తూ నా చర్చలో నేను కవర్ చేయలేను, MVCC. నా వెబ్సైట్లో ఈ అంశంపై నాకు ప్రత్యేక ప్రదర్శన ఉంది. మరియు ఈ ప్రెజెంటేషన్ కష్టం అని మీరు అనుకుంటే, MVCC బహుశా నా కష్టతరమైనది. మరియు మీకు ఆసక్తి ఉంటే, మీరు దీన్ని వెబ్సైట్లో చూడవచ్చు. మీరు వీడియోను చూడవచ్చు.
మనం అర్థం చేసుకోవలసిన మరో విషయం ఏమిటంటే లావాదేవీ IDలు. అనేక లావాదేవీలు ప్రత్యేకమైన ఐడెంటిఫైయర్లు లేకుండా పని చేయవు. మరియు ఇక్కడ మేము లావాదేవీ అంటే ఏమిటో వివరించాము. Postgres రెండు లావాదేవీల నంబరింగ్ వ్యవస్థలను కలిగి ఉంది. ఇది చాలా అందమైన పరిష్కారం కాదని నాకు తెలుసు.
స్లయిడ్లను అర్థం చేసుకోవడం చాలా కష్టంగా ఉంటుందని గుర్తుంచుకోండి, కాబట్టి ఎరుపు రంగులో హైలైట్ చేయబడినది మీరు శ్రద్ధ వహించాల్సిన అవసరం ఉంది.
చూద్దాం. లావాదేవీ సంఖ్య ఎరుపు రంగులో హైలైట్ చేయబడింది. SELECT pg_back ఫంక్షన్ ఇక్కడ చూపబడింది. ఇది నా లావాదేవీ మరియు లావాదేవీ IDని తిరిగి ఇస్తుంది.
ఇంకొక విషయం, మీరు ఈ ప్రెజెంటేషన్ను ఇష్టపడి, మీ డేటాబేస్లో దీన్ని అమలు చేయాలనుకుంటే, మీరు గులాబీ రంగులో ఉన్న ఈ లింక్కి వెళ్లి ఈ ప్రెజెంటేషన్ కోసం SQLని డౌన్లోడ్ చేసుకోవచ్చు. మరియు మీరు దీన్ని మీ PSQLలో అమలు చేయవచ్చు మరియు మొత్తం ప్రెజెంటేషన్ వెంటనే మీ స్క్రీన్పై కనిపిస్తుంది. ఇది పువ్వులు కలిగి ఉండదు, కానీ కనీసం మనం దానిని చూడవచ్చు.
ఈ సందర్భంలో, మేము లావాదేవీ IDని చూస్తాము. ఇది మేము ఆమెకు కేటాయించిన నంబర్. మరియు పోస్ట్గ్రెస్లో మరొక రకమైన లావాదేవీ ID ఉంది, దీనిని వర్చువల్ లావాదేవీ ID అంటారు
మరియు మనం దీనిని అర్థం చేసుకోవాలి. ఇది చాలా ముఖ్యమైనది, లేకుంటే పోస్ట్గ్రెస్లో లాక్ చేయడాన్ని మనం అర్థం చేసుకోలేము.
వర్చువల్ లావాదేవీ ID అనేది స్థిరమైన విలువలను కలిగి లేని లావాదేవీ ID. ఉదాహరణకు, నేను SELECT ఆదేశాన్ని అమలు చేస్తే, నేను ఎక్కువగా డేటాబేస్ను మార్చను, నేను దేనినీ లాక్ చేయను. కాబట్టి మేము సాధారణ SELECTని అమలు చేసినప్పుడు, మేము ఆ లావాదేవీకి నిరంతర IDని ఇవ్వము. మేము అక్కడ ఆమెకు వర్చువల్ IDని మాత్రమే ఇస్తాము.
మరియు ఇది పోస్ట్గ్రెస్ పనితీరును మెరుగుపరుస్తుంది, క్లీనప్ సామర్థ్యాలను మెరుగుపరుస్తుంది, కాబట్టి వర్చువల్ లావాదేవీ ID రెండు సంఖ్యలను కలిగి ఉంటుంది. స్లాష్కు ముందు ఉన్న మొదటి సంఖ్య బ్యాకెండ్ ID. మరియు కుడి వైపున మనం ఒక కౌంటర్ మాత్రమే చూస్తాము.
అందువల్ల, నేను అభ్యర్థనను అమలు చేస్తే, అది బ్యాకెండ్ ID 2 అని చెబుతుంది.
మరియు నేను అటువంటి లావాదేవీల శ్రేణిని అమలు చేస్తే, నేను ప్రశ్నను అమలు చేసిన ప్రతిసారీ కౌంటర్ పెరుగుతుందని మేము చూస్తాము. ఉదాహరణకు, నేను 2/10, 2/11, 2/12 మొదలైన ప్రశ్నలను అమలు చేసినప్పుడు.
ఇక్కడ రెండు నిలువు వరుసలు ఉన్నాయని గుర్తుంచుకోండి. ఎడమవైపున మనకు వర్చువల్ లావాదేవీ ID – 2/12 కనిపిస్తుంది. మరియు కుడి వైపున మనకు శాశ్వత లావాదేవీ ID ఉంది. మరియు ఈ ఫీల్డ్ ఖాళీగా ఉంది. మరియు ఈ లావాదేవీ డేటాబేస్ను సవరించదు. కాబట్టి నేను దానికి శాశ్వత లావాదేవీ IDని ఇవ్వను.
నేను విశ్లేషణ ఆదేశాన్ని ((విశ్లేషణ) అమలు చేసిన వెంటనే, అదే ప్రశ్న నాకు శాశ్వత లావాదేవీ IDని ఇస్తుంది. ఇది మనలో ఎలా మారిందో చూడండి. నా దగ్గర ఇంతకు ముందు ఈ ID లేదు, కానీ ఇప్పుడు నా దగ్గర ఉంది.
కాబట్టి ఇక్కడ మరొక అభ్యర్థన, మరొక లావాదేవీ. వర్చువల్ లావాదేవీ సంఖ్య 2/13. మరియు నేను నిరంతర లావాదేవీ ID కోసం అడిగితే, నేను ప్రశ్నను అమలు చేసినప్పుడు, నేను దానిని పొందుతాను.
కాబట్టి, మరొకసారి. మా వద్ద వర్చువల్ లావాదేవీ ID మరియు నిరంతర లావాదేవీ ID ఉన్నాయి. పోస్ట్గ్రెస్ ప్రవర్తనను అర్థం చేసుకోవడానికి ఈ విషయాన్ని అర్థం చేసుకోండి.
మేము మూడవ విభాగానికి వెళ్తాము. ఇక్కడ మేము పోస్ట్గ్రెస్లోని వివిధ రకాల తాళాల గుండా నడుస్తాము. ఇది చాలా ఆసక్తికరంగా లేదు. చివరి విభాగం మరింత ఆసక్తికరంగా ఉంటుంది. కానీ మనం ప్రాథమిక విషయాలను పరిగణించాలి, లేకపోతే తరువాత ఏమి జరుగుతుందో మనకు అర్థం కాదు.
మేము ఈ విభాగం ద్వారా వెళ్తాము, మేము ప్రతి రకమైన లాక్ని పరిశీలిస్తాము. మరియు అవి ఎలా ఇన్స్టాల్ చేయబడ్డాయి, అవి ఎలా పని చేస్తాయి అనేదానికి ఉదాహరణలను నేను మీకు చూపుతాను, పోస్ట్గ్రెస్లో లాకింగ్ ఎలా పని చేస్తుందో చూడటానికి మీరు ఉపయోగించగల కొన్ని ప్రశ్నలను నేను మీకు చూపుతాను.
ప్రశ్నను సృష్టించడానికి మరియు పోస్ట్గ్రెస్లో ఏమి జరుగుతుందో చూడటానికి, మేము సిస్టమ్ వీక్షణలో ప్రశ్నను జారీ చేయాలి. ఈ సందర్భంలో, pg_lock ఎరుపు రంగులో హైలైట్ చేయబడింది. Pg_lock అనేది సిస్టమ్ టేబుల్, ఇది పోస్ట్గ్రెస్లో ప్రస్తుతం ఏ తాళాలు ఉపయోగించబడుతున్నాయో మాకు తెలియజేస్తుంది.
అయినప్పటికీ, మీకు pg_lock చూపించడం నాకు చాలా కష్టం ఎందుకంటే ఇది చాలా క్లిష్టంగా ఉంది. కాబట్టి నేను pg_locksని చూపే వీక్షణను సృష్టించాను. మరియు ఇది నాకు కొంత పని చేస్తుంది, అది నన్ను బాగా అర్థం చేసుకోవడానికి అనుమతిస్తుంది. అంటే, ఇది నా లాక్లు, నా స్వంత సెషన్ మొదలైనవాటిని మినహాయిస్తుంది. ఇది కేవలం ప్రామాణిక SQL మరియు ఏమి జరుగుతుందో మీకు బాగా చూపించడానికి మిమ్మల్ని అనుమతిస్తుంది.
మరొక సమస్య ఏమిటంటే, ఈ వీక్షణ చాలా విస్తృతమైనది, కాబట్టి నేను రెండవదాన్ని సృష్టించాలి - లాక్వ్యూ2.
మరియు ఇది నాకు టేబుల్ నుండి మరిన్ని నిలువు వరుసలను చూపుతుంది. మరియు నాకు మిగిలిన నిలువు వరుసలను చూపే మరొకటి. ఇది చాలా క్లిష్టంగా ఉంటుంది, కాబట్టి నేను దానిని వీలైనంత సరళంగా ప్రదర్శించడానికి ప్రయత్నించాను.
కాబట్టి మేము లాక్డెమో అనే పట్టికను సృష్టించాము. మరియు మేము అక్కడ ఒక లైన్ సృష్టించాము. ఇది మా నమూనా పట్టిక. మరియు లాక్ల ఉదాహరణలను మీకు చూపడానికి మేము విభాగాలను సృష్టిస్తాము.
కాబట్టి, ఒక అడ్డు వరుస, ఒక నిలువు వరుస. మొదటి రకం లాక్ని యాక్సెస్ షేర్ అంటారు. ఇది అతి తక్కువ నిర్బంధ నిరోధం. ఇది ఆచరణాత్మకంగా ఇతర తాళాలతో విభేదించదని దీని అర్థం.
మరియు మేము లాక్ని స్పష్టంగా నిర్వచించాలనుకుంటే, మేము "లాక్ టేబుల్" ఆదేశాన్ని అమలు చేస్తాము. మరియు అది స్పష్టంగా బ్లాక్ చేస్తుంది, అంటే యాక్సెస్ షేర్ మోడ్లో మేము లాక్ టేబుల్ని ప్రారంభిస్తాము. మరియు నేను నేపథ్యంలో PSQLని అమలు చేస్తే, నేను నా మొదటి సెషన్ నుండి రెండవ సెషన్ను ఈ విధంగా ప్రారంభిస్తాను. అంటే, నేను ఇక్కడ ఏమి చేస్తాను? నేను మరొక సెషన్కి వెళ్లి, "ఈ అభ్యర్థన కోసం లాక్వ్యూను నాకు చూపించు" అని చెప్పాను. మరియు ఇక్కడ నేను ఈ పట్టికలో AccessShareLockని కలిగి ఉన్నాను. నేను కోరినది ఇదే. మరియు అతను బ్లాక్ కేటాయించినట్లు చెప్పారు. చాలా సింపుల్.
ఇంకా, మేము రెండవ నిలువు వరుసను చూస్తే, అక్కడ ఏమీ లేదు. అవి ఖాళీగా ఉన్నాయి.
మరియు నేను "SELECT" ఆదేశాన్ని అమలు చేస్తే, ఇది AccessShareLockని అభ్యర్థించడానికి అవ్యక్త (స్పష్టమైన) మార్గం. కాబట్టి నేను నా పట్టికను విడుదల చేస్తాను మరియు ప్రశ్నను అమలు చేస్తాను మరియు ప్రశ్న బహుళ వరుసలను అందిస్తుంది. మరియు ఒక లైన్లో మనం AccessShareLockని చూస్తాము. అందువలన, SELECT టేబుల్పై AccessShareLockకి కాల్ చేస్తుంది. మరియు ఇది తక్కువ-స్థాయి లాక్ అయినందున వాస్తవంగా దేనితోనూ విభేదించదు.
నేను SELECTను అమలు చేసి మూడు వేర్వేరు పట్టికలను కలిగి ఉంటే ఏమి చేయాలి? ఇంతకు ముందు నేను ఒక టేబుల్ని మాత్రమే నడుపుతున్నాను, ఇప్పుడు నేను మూడు రన్ చేస్తున్నాను: pg_class, pg_namespace మరియు pg_attribute.
ఇప్పుడు నేను ప్రశ్నను చూసినప్పుడు, నేను మూడు పట్టికలలో 9 AccessShareLocksని చూస్తున్నాను. ఎందుకు? మూడు పట్టికలు నీలం రంగులో హైలైట్ చేయబడ్డాయి: pg_attribute, pg_class, pg_namespace. కానీ ఈ పట్టికల ద్వారా నిర్వచించబడిన అన్ని సూచికలు కూడా AccessShareLock కలిగి ఉన్నాయని మీరు చూడవచ్చు.
మరియు ఇది ఆచరణాత్మకంగా ఇతరులతో విభేదించని లాక్. మరియు అది చేసేదల్లా మనం టేబుల్ని ఎంచుకున్నప్పుడు దాన్ని రీసెట్ చేయకుండా నిరోధించడమే. ఇది అర్ధమే. అంటే, మనం పట్టికను ఎంచుకుంటే, అది ఆ సమయంలో అదృశ్యమవుతుంది, అప్పుడు ఇది తప్పు, కాబట్టి AccessShare అనేది తక్కువ స్థాయి లాక్, ఇది "నేను పని చేస్తున్నప్పుడు ఈ పట్టికను వదలకండి". ముఖ్యంగా, ఆమె చేసేది అంతే.
రో షేర్ - ఈ లాక్ కొద్దిగా భిన్నంగా ఉంటుంది.
ఒక ఉదాహరణ తీసుకుందాం. ప్రతి అడ్డు వరుసను ఒక్కొక్కటిగా లాక్ చేసే ROW SHARE పద్ధతిని ఎంచుకోండి. ఈ విధంగా మనం చూస్తున్నప్పుడు ఎవరూ వాటిని తొలగించలేరు లేదా మార్చలేరు.
కాబట్టి SHARE లాక్ ఏమి చేస్తుంది? SELECT కోసం లావాదేవీ ID 681 అని మేము చూస్తాము. మరియు ఇది ఆసక్తికరంగా ఉంది. ఇక్కడ ఏమి జరిగింది? "లాక్" ఫీల్డ్లో నంబర్ను మనం మొదటిసారి చూస్తాము. మేము లావాదేవీ IDని తీసుకుంటాము మరియు అది దానిని ప్రత్యేకమైన మోడ్లో బ్లాక్ చేస్తున్నట్లు చెబుతుంది. నేను టేబుల్లో ఎక్కడో సాంకేతికంగా లాక్ చేయబడిన వరుసను కలిగి ఉన్నాను అని చెబుతుంది. అయితే ఎక్కడిది అన్నది మాత్రం కచ్చితంగా చెప్పలేదు. మేము దీనిని కొంచెం తరువాత మరింత వివరంగా పరిశీలిస్తాము.
ఇక్కడ మనం తాళం మనచే ఉపయోగించబడుతుందని చెప్పాము.
కాబట్టి, ప్రత్యేకమైన లాక్ అది ప్రత్యేకమైనదని స్పష్టంగా చెబుతుంది. మరియు మీరు ఈ పట్టికలోని అడ్డు వరుసను తొలగిస్తే, మీరు చూడగలిగినట్లుగా ఇది జరుగుతుంది.
SHARE EXCLUSIVE అనేది పొడవైన లాక్.
ఇది ఉపయోగించబడుతుంది (విశ్లేషణ) ఎనలైజర్ కమాండ్.
షేర్ లాక్ - మీరు షేర్ మోడ్లో స్పష్టంగా లాక్ చేయవచ్చు.
మీరు ప్రత్యేకమైన సూచికను కూడా సృష్టించవచ్చు. మరియు అక్కడ మీరు వాటిలో భాగమైన SHARE LOCKని చూడవచ్చు. మరియు అది టేబుల్ని లాక్ చేసి దానిపై SHARE లాక్ని ఉంచుతుంది.
డిఫాల్ట్గా, టేబుల్పై SHARE LOCK అంటే ఇతర వ్యక్తులు టేబుల్ని చదవగలరు, కానీ ఎవరూ దానిని సవరించలేరు. మరియు మీరు ప్రత్యేకమైన సూచికను సృష్టించినప్పుడు ఇది ఖచ్చితంగా జరుగుతుంది.
నేను ఒక ప్రత్యేకమైన ఏకకాల సూచికను సృష్టించినట్లయితే, నేను వేరే రకమైన లాకింగ్ను కలిగి ఉంటాను ఎందుకంటే, మీకు గుర్తున్నట్లుగా, ఏకకాలంలో సూచికలను ఉపయోగించడం వలన లాకింగ్ అవసరాన్ని తగ్గిస్తుంది. మరియు నేను సాధారణ లాక్, సాధారణ సూచికను ఉపయోగిస్తే, పట్టిక సూచిక సృష్టించబడుతున్నప్పుడు దానికి వ్రాయడాన్ని నేను నిరోధిస్తాను. నేను ఏకకాల సూచికను ఉపయోగిస్తే, నేను వేరే రకమైన లాకింగ్ని ఉపయోగించాలి.
SHARE ROW EXCLUSIVE – మళ్ళీ దీన్ని స్పష్టంగా (స్పష్టంగా) సెట్ చేయవచ్చు.
లేదా మనం ఒక నియమాన్ని సృష్టించవచ్చు, అనగా, అది ఉపయోగించబడే ఒక నిర్దిష్ట సందర్భాన్ని తీసుకోవచ్చు.
ఎక్స్క్లూజివ్ లాకింగ్ అంటే ఎవరూ టేబుల్ని మార్చలేరు.
ఇక్కడ మనకు వివిధ రకాల తాళాలు కనిపిస్తాయి.
ACCESS EXCLUSIVE, ఉదాహరణకు, నిరోధించే ఆదేశం. ఉదాహరణకు, మీరు చేస్తే CLUSTER table
, అప్పుడు ఎవరూ అక్కడ వ్రాయలేరు అని దీని అర్థం. మరియు ఇది పట్టికను మాత్రమే కాకుండా, సూచికలను కూడా లాక్ చేస్తుంది.
ఇది ACCESS EXCLUSIVE బ్లాకింగ్ యొక్క రెండవ పేజీ, ఇక్కడ ఇది పట్టికలో ఏది బ్లాక్ చేస్తుందో మనం చూస్తాము. ఇది వ్యక్తిగత పట్టిక వరుసలను లాక్ చేస్తుంది, ఇది చాలా ఆసక్తికరంగా ఉంటుంది.
నేను ఇవ్వాలనుకున్న ప్రాథమిక సమాచారం అంతే. మేము లాక్ల గురించి, లావాదేవీల IDల గురించి, వర్చువల్ లావాదేవీల IDల గురించి, శాశ్వత లావాదేవీల IDల గురించి మాట్లాడుకున్నాము.
మరియు ఇప్పుడు మేము కొన్ని బ్లాకింగ్ ఉదాహరణల ద్వారా వెళ్తాము. ఇది అత్యంత ఆసక్తికరమైన భాగం. మేము చాలా ఆసక్తికరమైన కేసులను పరిశీలిస్తాము. మరియు ఈ ప్రెజెంటేషన్లో నా లక్ష్యం కొన్ని విషయాలను బ్లాక్ చేయడానికి ప్రయత్నించినప్పుడు పోస్ట్గ్రెస్ వాస్తవానికి ఏమి చేస్తుందో మీకు బాగా అర్థం చేసుకోవడం. అతను భాగాలను నిరోధించడంలో చాలా మంచివాడని నేను భావిస్తున్నాను.
కొన్ని నిర్దిష్ట ఉదాహరణలను చూద్దాం.
మేము పట్టికలు మరియు పట్టికలో ఒక వరుసతో ప్రారంభిస్తాము. నేను ఏదైనా ఇన్సర్ట్ చేసినప్పుడు టేబుల్పై ఎక్స్క్లూజివ్లాక్, ట్రాన్సాక్షన్ ఐడి మరియు ఎక్స్క్లూజివ్లాక్ ప్రదర్శించబడతాయి.
నేను మరో రెండు అడ్డు వరుసలను చొప్పించినట్లయితే ఏమి జరుగుతుంది? ఇప్పుడు మా పట్టికలో మూడు వరుసలు ఉన్నాయి. మరియు నేను ఒక అడ్డు వరుసను చొప్పించాను మరియు దీనిని అవుట్పుట్గా పొందాను. మరియు నేను మరో రెండు అడ్డు వరుసలను చొప్పించినట్లయితే, దాని గురించి విచిత్రం ఏమిటి? ఇక్కడ ఒక విచిత్రమైన విషయం ఉంది ఎందుకంటే నేను ఈ టేబుల్కి మూడు అడ్డు వరుసలను జోడించాను, కానీ లాక్ టేబుల్లో నా దగ్గర ఇంకా రెండు వరుసలు ఉన్నాయి. మరియు ఇది తప్పనిసరిగా పోస్ట్గ్రెస్ యొక్క ప్రాథమిక ప్రవర్తన.
డేటాబేస్లో మీరు 100 వరుసలను లాక్ చేస్తే, మీరు 100 లాక్ ఎంట్రీలను సృష్టించాల్సి ఉంటుందని చాలా మంది అనుకుంటారు. నేను ఒకేసారి 1 అడ్డు వరుసలను బ్లాక్ చేస్తే, నాకు అలాంటి 000 ప్రశ్నలు అవసరమవుతాయి. మరియు బ్లాక్ చేయడానికి నాకు మిలియన్ లేదా బిలియన్ అవసరమైతే. కానీ మనం ఇలా చేస్తే, అది బాగా పని చేయదు. మీరు ఒక్కొక్క అడ్డు వరుస కోసం బ్లాకింగ్ ఎంట్రీలను సృష్టించే సిస్టమ్ను ఉపయోగించినట్లయితే, ఇది సంక్లిష్టంగా ఉందని మీరు చూడవచ్చు. ఎందుకంటే మీరు వెంటనే ఓవర్ఫ్లో చేసే లాక్ టేబుల్ని నిర్వచించవలసి ఉంటుంది, కానీ పోస్ట్గ్రెస్ అలా చేయదు.
మరియు ఈ స్లయిడ్ గురించి నిజంగా ముఖ్యమైనది ఏమిటంటే, MVCC లోపల వ్యక్తిగత అడ్డు వరుసలను లాక్ చేసే మరొక సిస్టమ్ ఉందని ఇది స్పష్టంగా చూపిస్తుంది. కాబట్టి మీరు బిలియన్ల కొద్దీ అడ్డు వరుసలను లాక్ చేసినప్పుడు, Postgres ఒక బిలియన్ ప్రత్యేక లాకింగ్ ఆదేశాలను సృష్టించదు. మరియు ఇది ఉత్పాదకతపై చాలా మంచి ప్రభావాన్ని చూపుతుంది.
నవీకరణ గురించి ఏమిటి? నేను ఇప్పుడు అడ్డు వరుసను అప్డేట్ చేస్తున్నాను మరియు ఇది ఒకేసారి రెండు వేర్వేరు ఆపరేషన్లను చేసినట్లు మీరు చూడవచ్చు. ఇది అదే సమయంలో టేబుల్ను లాక్ చేసింది, కానీ అది ఇండెక్స్ను కూడా లాక్ చేసింది. మరియు ఈ పట్టికలో ప్రత్యేకమైన పరిమితులు ఉన్నందున అతను సూచికను లాక్ చేయవలసి ఉంది. మరియు దానిని ఎవరూ మార్చలేదని మేము నిర్ధారించుకోవాలనుకుంటున్నాము, కాబట్టి మేము దానిని బ్లాక్ చేస్తాము.
నేను రెండు అడ్డు వరుసలను అప్డేట్ చేయాలనుకుంటే ఏమి జరుగుతుంది? మరియు అతను అదే విధంగా ప్రవర్తించడం మనం చూస్తాము. మేము రెండు రెట్లు ఎక్కువ నవీకరణలను చేస్తాము, కానీ సరిగ్గా అదే సంఖ్యలో లాక్ లైన్లు.
పోస్ట్గ్రెస్ దీన్ని ఎలా చేస్తుందని మీరు ఆలోచిస్తున్నట్లయితే, పోస్ట్గ్రెస్ అంతర్గతంగా ఈ పంక్తులను ఎలా మారుస్తుందో తెలుసుకోవడానికి మీరు MVCCలో నా చర్చలను వినవలసి ఉంటుంది. మరియు పోస్ట్గ్రెస్ దీన్ని చేసే మార్గాన్ని కలిగి ఉంది, కానీ ఇది టేబుల్ లాకింగ్ స్థాయిలో చేయదు, ఇది తక్కువ మరియు మరింత సమర్థవంతమైన స్థాయిలో చేస్తుంది.
నేను ఏదైనా తొలగించాలనుకుంటే? నేను తొలగిస్తే, ఉదాహరణకు, ఒక అడ్డు వరుస మరియు నేను ఇప్పటికీ నా రెండు బ్లాకింగ్ ఇన్పుట్లను కలిగి ఉన్నాను మరియు నేను వాటన్నింటినీ తొలగించాలనుకున్నా, అవి ఇప్పటికీ అలాగే ఉన్నాయి.
మరియు, ఉదాహరణకు, నేను 1 పంక్తులను చొప్పించాలనుకుంటున్నాను, ఆపై 000 పంక్తులను తొలగించండి లేదా జోడించాలనుకుంటున్నాను, ఆపై నేను జోడించే లేదా మార్చిన వ్యక్తిగత పంక్తులు, అవి ఇక్కడ రికార్డ్ చేయబడవు. అవి సిరీస్లోనే తక్కువ స్థాయిలో వ్రాయబడ్డాయి. మరియు MVCC ప్రసంగంలో నేను దీని గురించి వివరంగా మాట్లాడాను. కానీ మీరు తాళాలను విశ్లేషిస్తున్నప్పుడు మీరు టేబుల్ స్థాయిలో లాక్ చేస్తున్నారని మరియు ఇక్కడ వ్యక్తిగత వరుసలు ఎలా రికార్డ్ చేయబడుతున్నాయో మీకు కనిపించడం లేదని నిర్ధారించుకోవడం చాలా ముఖ్యం.
స్పష్టమైన నిరోధించడం గురించి ఏమిటి?
నేను రిఫ్రెష్ చేయి క్లిక్ చేస్తే, నాకు రెండు అడ్డు వరుసలు లాక్ చేయబడ్డాయి. నేను వాటన్నింటినీ ఎంచుకుని, "అన్నిచోట్లా అప్డేట్ చేయి"ని క్లిక్ చేస్తే, నా దగ్గర ఇంకా రెండు బ్లాకింగ్ రికార్డ్లు ఉన్నాయి.
మేము ఒక్కొక్క వరుసకు ప్రత్యేక రికార్డులను సృష్టించము. ఉత్పాదకత పడిపోతుంది కాబట్టి, అది చాలా ఎక్కువగా ఉండవచ్చు. మరియు మనం అసహ్యకరమైన పరిస్థితిలో ఉండవచ్చు.
మరియు అదే విషయం, మనం భాగస్వామ్యం చేస్తే, మనం 30 సార్లు చేయవచ్చు.
మేము మా పట్టికను పునరుద్ధరిస్తాము, అన్నింటినీ తొలగిస్తాము, ఆపై ఒక వరుసను మళ్లీ చొప్పించాము.
పోస్ట్గ్రెస్లో మీరు చూసే మరొక ప్రవర్తన బాగా తెలిసిన మరియు కావలసిన ప్రవర్తన మీరు అప్డేట్ చేయవచ్చు లేదా ఎంచుకోవచ్చు. మరియు మీరు దీన్ని అదే సమయంలో చేయవచ్చు. మరియు ఎంచుకోండి అప్డేట్ను నిరోధించదు మరియు వ్యతిరేక దిశలో అదే విషయం. రచయితను అడ్డుకోవద్దని పాఠకుడికి చెబుతాం, రచయిత పాఠకులను అడ్డుకోలేదు.
నేను దీనికి ఒక ఉదాహరణ చూపిస్తాను. నేను ఇప్పుడు ఎంపిక చేస్తాను. మేము INSERT చేస్తాము. ఆపై మీరు చూడగలరు - 694. మీరు ఈ చొప్పించడం చేసిన లావాదేవీ యొక్క IDని చూడవచ్చు. మరియు అది ఎలా పని చేస్తుంది.
మరియు నేను ఇప్పుడు నా బ్యాకెండ్ IDని చూస్తే, అది ఇప్పుడు 695.
మరియు నా టేబుల్లో 695 కనిపించడం నేను చూడగలను.
మరియు నేను ఇక్కడ ఇలా అప్డేట్ చేస్తే, నాకు వేరే కేసు వస్తుంది. ఈ సందర్భంలో, 695 అనేది ప్రత్యేకమైన లాక్, మరియు నవీకరణ అదే ప్రవర్తనను కలిగి ఉంటుంది, కానీ వాటి మధ్య ఎటువంటి వైరుధ్యం లేదు, ఇది చాలా అసాధారణమైనది.
మరియు ఎగువన అది షేర్లాక్ అని మరియు దిగువన ఇది ఎక్స్క్లూజివ్లాక్ అని మీరు చూడవచ్చు. మరియు రెండు లావాదేవీలు పని చేశాయి.
మరియు ఇది ఎలా జరుగుతుందో అర్థం చేసుకోవడానికి మీరు MVCCలో నా ప్రసంగాన్ని వినాలి. కానీ మీరు దీన్ని ఒకే సమయంలో చేయగలరని ఇది ఒక ఉదాహరణ, అంటే ఒకే సమయంలో SELECT మరియు UPDATE చేయండి.
రీసెట్ చేసి మరో ఆపరేషన్ చేద్దాం.
మీరు ఒకే వరుసలో ఒకేసారి రెండు నవీకరణలను అమలు చేయడానికి ప్రయత్నిస్తే, అది బ్లాక్ చేయబడుతుంది. మరియు గుర్తుంచుకోండి, నేను చెప్పాను, పాఠకుడు రచయితను నిరోధించడు మరియు రచయిత పాఠకుడిని నిరోధించడు, కానీ ఒక రచయిత మరొక రచయితను అడ్డుకుంటాడు. అంటే, ఒకే వరుసను ఒకే సమయంలో ఇద్దరు వ్యక్తులు అప్డేట్ చేయలేరు. వాటిలో ఒకటి పూర్తయ్యే వరకు మీరు వేచి ఉండాలి.
మరియు దీనిని వివరించడానికి, నేను లాక్డెమో పట్టికను చూస్తాను. మరియు మేము ఒక వరుసను చూస్తాము. ప్రతి లావాదేవీకి 698.
మేము దీన్ని 2కి అప్డేట్ చేసాము. 699 మొదటి నవీకరణ. మరియు అది విజయవంతమైంది లేదా పెండింగ్లో ఉన్న లావాదేవీలో ఉంది మరియు మేము నిర్ధారించడానికి లేదా రద్దు చేయడానికి వేచి ఉంది.
కానీ మరొకటి చూడండి - 2/51 మా మొదటి లావాదేవీ, మా మొదటి సెషన్. 3/112 అనేది ఎగువ నుండి వచ్చిన రెండవ అభ్యర్థన, ఆ విలువను 3కి మార్చింది. మరియు మీరు గమనిస్తే, పైభాగం దానంతట అదే లాక్ చేయబడింది, అది 699. కానీ 3/112 లాక్ని మంజూరు చేయలేదు. Lock_mode నిలువు వరుస అది దేని కోసం వేచి ఉందో చెబుతుంది. ఇది 699ని అంచనా వేస్తుంది. మరియు 699 ఎక్కడ ఉందో చూస్తే, అది ఎక్కువ. మరియు మొదటి సెషన్ ఏమి చేసింది? ఆమె తన సొంత లావాదేవీ IDకి ప్రత్యేకమైన లాక్ని సృష్టించింది. పోస్ట్గ్రెస్ దీన్ని ఈ విధంగా చేస్తుంది. ఇది దాని స్వంత లావాదేవీ IDని బ్లాక్ చేస్తుంది. మరియు ఎవరైనా నిర్ధారించడానికి లేదా రద్దు చేయడానికి మీరు వేచి ఉండాలనుకుంటే, లావాదేవీ పెండింగ్లో ఉన్నప్పుడు మీరు వేచి ఉండాలి. మరియు అందుకే మనం ఒక విచిత్రమైన గీతను చూడవచ్చు.
మళ్ళీ చూద్దాం. ఎడమవైపున మన ప్రాసెసింగ్ ID కనిపిస్తుంది. రెండవ కాలమ్లో మన వర్చువల్ లావాదేవీ IDని చూస్తాము మరియు మూడవది lock_typeని చూస్తాము. దీని అర్థం ఏమిటి? ముఖ్యంగా అది చెప్పేదేమిటంటే, ఇది లావాదేవీ IDని బ్లాక్ చేస్తోంది. కానీ దిగువన ఉన్న అన్ని అడ్డు వరుసలు సంబంధం అని చెప్పడం గమనించండి. కాబట్టి మీరు టేబుల్పై రెండు రకాల తాళాలను కలిగి ఉంటారు. రిలేషన్ లాక్ ఉంది. ఆపై లావాదేవీల బ్లాకింగ్ ఉంది, ఇక్కడ మీరు మీ స్వంతంగా బ్లాక్ చేస్తారు, ఇది మొదటి వరుసలో లేదా చాలా దిగువన సరిగ్గా అదే జరుగుతుంది, ట్రాన్సాక్షనిడ్ ఉన్న చోట, దాని ఆపరేషన్ పూర్తి చేయడానికి మేము 699 వరకు వేచి ఉన్నాము.
ఇక్కడ ఏమి జరుగుతుందో నేను చూస్తాను. మరియు ఇక్కడ రెండు విషయాలు ఏకకాలంలో జరుగుతాయి. మీరు మొదటి అడ్డు వరుసలో ఉన్న లావాదేవీ ID లాక్ని చూస్తున్నారు, అది స్వయంగా లాక్ చేయబడి ఉంటుంది. మరియు ప్రజలు వేచి ఉండేలా చేయడానికి ఆమె తనను తాను నిరోధించుకుంటుంది.
6వ లైనులో చూస్తే మొదటిది అదే ఎంట్రీ. అందువల్ల లావాదేవీ 699 బ్లాక్ చేయబడింది. 700 కూడా సెల్ఫ్ లాకింగ్. ఆపై దిగువ వరుసలో మేము 699 దాని ఆపరేషన్ను పూర్తి చేయడానికి వేచి ఉన్నామని మీరు చూస్తారు.
మరియు lock_typeలో, tuple మీరు సంఖ్యలను చూస్తారు.
ఇది 0/10 అని మీరు చూడవచ్చు. మరియు ఇది పేజీ సంఖ్య, మరియు ఈ నిర్దిష్ట వరుస యొక్క ఆఫ్సెట్ కూడా.
మరియు మేము అప్డేట్ చేసినప్పుడు అది 0/11 అవుతుందని మీరు చూస్తారు.
కానీ వాస్తవానికి ఇది 0/10, ఎందుకంటే ఈ ఆపరేషన్ కోసం వేచి ఉంది. నేను ధృవీకరించడానికి వేచి ఉన్న సిరీస్ ఇదే అని చూసే అవకాశం మాకు ఉంది.
ఒకసారి మేము దానిని నిర్ధారించి, కమిట్ని నొక్కిన తర్వాత, మరియు నవీకరణ పూర్తయినప్పుడు, ఇది మనకు మళ్లీ వస్తుంది. ట్రాన్సాక్షన్ 700 మాత్రమే తాళం, ఇది కట్టుబడి ఉన్నందున ఇది ఎవరి కోసం వేచి ఉండదు. ఇది లావాదేవీ పూర్తయ్యే వరకు వేచి ఉంటుంది. ఒకసారి 699 పరుగులు ఔట్ అయితే, మేము ఇకపై దేని కోసం వేచి ఉండము. మరియు ఇప్పుడు లావాదేవీ 700 ప్రతిదీ బాగానే ఉందని, అనుమతించబడిన అన్ని పట్టికలలో అవసరమైన అన్ని తాళాలు ఉన్నాయని చెప్పింది.
మరియు ఈ మొత్తం విషయాన్ని మరింత క్లిష్టంగా చేయడానికి, మేము మరొక వీక్షణను సృష్టిస్తాము, ఇది ఈ సమయంలో మాకు సోపానక్రమాన్ని అందిస్తుంది. మీరు ఈ అభ్యర్థనను అర్థం చేసుకుంటారని నేను ఆశించడం లేదు. కానీ ఇది ఏమి జరుగుతుందో మాకు స్పష్టమైన వీక్షణను ఇస్తుంది.
ఇది మరొక విభాగాన్ని కలిగి ఉన్న పునరావృత వీక్షణ. ఆపై అది మళ్లీ అన్నింటినీ తిరిగి తీసుకువస్తుంది. దీనిని ఉపయోగించుకుందాం.
మూడు ఏకకాలంలో అప్డేట్లు చేసి, ఇప్పుడు వరుస మూడు అని చెబితే ఎలా ఉంటుంది. మరియు మేము 3 నుండి 4 వరకు మారుస్తాము.
మరియు ఇక్కడ మనకు 4. మరియు లావాదేవీ ID 702 కనిపిస్తుంది.
ఆపై నేను 4 నుండి 5 వరకు మారుస్తాను. మరియు 5 నుండి 6 వరకు మరియు 6 నుండి 7 వరకు. మరియు ఈ ఒక లావాదేవీ ముగిసే వరకు వేచి ఉండే అనేక మంది వ్యక్తులను నేను వరుసలో ఉంచుతాను.
మరియు ప్రతిదీ స్పష్టమవుతుంది. మొదటి వరుస ఏమిటి? ఇది 702. ఇది వాస్తవానికి ఈ విలువను సెట్ చేసిన లావాదేవీ ID. నా మంజూరు కాలమ్లో ఏమి వ్రాయబడింది? నాకు మార్కులు ఉన్నాయి f
. లావాదేవీ ID 5 ముగిసే వరకు మేము వేచి ఉన్నందున (6, 7, 702) ఆమోదించబడని నా అప్డేట్లు ఇవి. అక్కడ మేము లావాదేవీ ID నిరోధించడాన్ని కలిగి ఉన్నాము. మరియు ఇది 5 లావాదేవీల ID లాక్లకు దారి తీస్తుంది.
మరియు మీరు 704 వద్ద, 705 వద్ద చూస్తే, అక్కడ ఇంకా ఏమీ వ్రాయబడలేదు, ఎందుకంటే వారికి ఇంకా ఏమి జరుగుతుందో తెలియదు. ఏం జరుగుతోందో తమకు తెలియదని వారు కేవలం రాశారు. మరియు వారు కేవలం నిద్రపోతారు ఎందుకంటే వారు ఎవరైనా పూర్తి చేస్తారని మరియు వరుసలను మార్చడానికి అవకాశం ఉన్నప్పుడు మేల్కొలపడానికి వేచి ఉంటారు.
ఇది ఇలా కనిపిస్తుంది. వీరంతా 12వ లైన్ కోసం ఎదురు చూస్తున్నారని స్పష్టమవుతోంది.
ఇది మనం ఇక్కడ చూసింది. ఇక్కడ 0/12 ఉంది.
కాబట్టి మొదటి లావాదేవీ ఆమోదించబడిన తర్వాత, సోపానక్రమం ఎలా పనిచేస్తుందో మీరు ఇక్కడ చూడవచ్చు. మరియు ఇప్పుడు ప్రతిదీ స్పష్టమవుతుంది. అవన్నీ శుభ్రమవుతాయి. మరియు వారు ఇప్పటికీ వేచి ఉన్నారు.
ఇక్కడ ఏమి జరుగుతోంది. 702 కట్టుబడి ఉంది. మరియు ఇప్పుడు 703 ఈ అడ్డు వరుస లాక్ని పొందుతుంది, ఆపై 704 కమిట్ అయ్యే వరకు 703 వేచి ఉంది. మరియు 705 దీని కోసం కూడా వేచి ఉంది. మరియు ఇవన్నీ పూర్తయినప్పుడు, వారు తమను తాము శుభ్రం చేసుకుంటారు. మరియు ప్రతి ఒక్కరూ వరుసలో ఉన్నారని నేను సూచించాలనుకుంటున్నాను. మరియు ప్రతి ఒక్కరూ మొదటి కారు కోసం ఎదురు చూస్తున్నప్పుడు ట్రాఫిక్ జామ్లో ఉన్న పరిస్థితికి ఇది చాలా పోలి ఉంటుంది. మొదటి కారు ఆగుతుంది మరియు అందరూ చాలా వరుసలో ఉన్నారు. అప్పుడు అది కదులుతుంది, తర్వాత తదుపరి కారు ముందుకు నడపవచ్చు మరియు దాని బ్లాక్ మొదలైనవి పొందవచ్చు.
మరియు ఇది మీకు తగినంత సంక్లిష్టంగా అనిపించకపోతే, మేము ఇప్పుడు మీతో డెడ్లాక్ల గురించి మాట్లాడుతాము. మీలో ఎవరు వారిని ఎదుర్కొన్నారో నాకు తెలియదు. డేటాబేస్ సిస్టమ్లలో ఇది చాలా సాధారణ సమస్య. కానీ డెడ్లాక్లు అంటే ఒక సెషన్ మరొక సెషన్ కోసం వేచి ఉన్నప్పుడు. మరియు ఈ సమయంలో మరొక సెషన్ మొదటి సెషన్ కోసం వేచి ఉంది.
మరియు, ఉదాహరణకు, ఇవాన్ ఇలా చెబితే: "నాకు ఏదైనా ఇవ్వండి" మరియు నేను ఇలా అన్నాను: "లేదు, మీరు నాకు వేరే ఏదైనా ఇస్తే మాత్రమే నేను మీకు ఇస్తాను." మరియు అతను చెప్పాడు, "లేదు, మీరు నాకు ఇవ్వకపోతే నేను మీకు ఇవ్వను." మరియు మేము ప్రతిష్టంభన పరిస్థితిలో ముగుస్తాము. ఇవాన్ ఇలా చేయడని నేను ఖచ్చితంగా అనుకుంటున్నాను, కాని మనకు ఇద్దరు వ్యక్తులు ఉన్నారని అర్థం, ఏదైనా పొందాలనుకునే వారు మరొకరు తమకు కావలసినది ఇచ్చే వరకు వారు దానిని ఇవ్వడానికి సిద్ధంగా లేరు. మరియు పరిష్కారం లేదు.
మరియు ముఖ్యంగా, మీ డేటాబేస్ దీన్ని గుర్తించాలి. ఆపై మీరు సెషన్లలో ఒకదాన్ని తొలగించాలి లేదా మూసివేయాలి, లేకపోతే అవి ఎప్పటికీ అలాగే ఉంటాయి. మరియు మేము దానిని డేటాబేస్లలో చూస్తాము, మేము దానిని ఆపరేటింగ్ సిస్టమ్స్లో చూస్తాము. మరియు మనకు సమాంతర ప్రక్రియలు ఉన్న అన్ని ప్రదేశాలలో, ఇది జరగవచ్చు.
మరియు ఇప్పుడు మేము రెండు డెడ్లాక్లను ఇన్స్టాల్ చేస్తాము. మేము 50 మరియు 80ని ఉంచుతాము. మొదటి వరుసలో, నేను 50 నుండి 50కి అప్డేట్ చేస్తాను. నేను లావాదేవీ నంబర్ 710ని పొందుతాను.
ఆపై నేను 80 నుండి 81కి మరియు 50 నుండి 51కి మారుస్తాను.
మరియు ఇది ఇలా ఉంటుంది. కాబట్టి 710 వరుస బ్లాక్ చేయబడింది మరియు 711 నిర్ధారణ కోసం వేచి ఉంది. మేము దీన్ని నవీకరించినప్పుడు చూశాము. 710 మా సిరీస్ యజమాని. మరియు 711 లావాదేవీని పూర్తి చేయడానికి 710 కోసం వేచి ఉంది.
మరియు అది ఏ వరుసలో ప్రతిష్టంభన ఏర్పడుతుందో కూడా చెబుతుంది. మరియు ఇక్కడ ఇది విచిత్రంగా ప్రారంభమవుతుంది.
ఇప్పుడు మేము 80 నుండి 80కి అప్డేట్ చేస్తున్నాము.
మరియు ఇక్కడే ప్రతిష్టంభనలు ప్రారంభమవుతాయి. 710 నుండి ప్రతిస్పందన కోసం 711 వేచి ఉంది మరియు 711 710 కోసం వేచి ఉంది. మరియు ఇది బాగా ముగియదు. మరియు దీని నుండి బయటపడటానికి మార్గం లేదు. మరియు వారు ఒకరి నుండి మరొకరు ప్రతిస్పందనను ఆశిస్తారు.
మరియు అది కేవలం ప్రతిదీ ఆలస్యం ప్రారంభమవుతుంది. మరియు మాకు అది వద్దు.
మరియు ఇది ఎప్పుడు జరుగుతుందో గమనించడానికి పోస్ట్గ్రెస్కు మార్గాలు ఉన్నాయి. మరియు ఇది జరిగినప్పుడు, మీరు ఈ లోపాన్ని పొందుతారు. మరియు దీని నుండి అటువంటి మరియు అటువంటి ప్రక్రియ మరొక ప్రక్రియ నుండి SHARE లాక్ కోసం వేచి ఉంది, అంటే, ఇది 711 ప్రక్రియ ద్వారా నిరోధించబడింది. మరియు ఆ ప్రక్రియ అటువంటి మరియు అటువంటి లావాదేవీ IDపై SHARE LOCK కోసం వేచి ఉంది మరియు అటువంటి ప్రక్రియ ద్వారా బ్లాక్ చేయబడింది. అందువల్ల ఇక్కడ ప్రతిష్టంభన పరిస్థితి నెలకొంది.
మూడు-మార్గం డెడ్లాక్లు ఉన్నాయా? ఇది సాధ్యమేనా? అవును.
మేము ఈ సంఖ్యలను పట్టికలో నమోదు చేస్తాము. మేము 40 నుండి 40 వరకు మారుస్తాము, మేము నిరోధించడం చేస్తాము.
మేము 60 నుండి 61, 80 నుండి 81 వరకు మారుస్తాము.
ఆపై మేము 80ని మారుస్తాము మరియు ఆపై విజృంభిస్తాము!
మరియు 714 ఇప్పుడు 715 కోసం వేచి ఉంది. 716వది 715వది కోసం వేచి ఉంది. మరియు దాని గురించి ఏమీ చేయలేము.
ఇక్కడ ఇద్దరు వ్యక్తులు లేరు, ఇప్పటికే ఇక్కడ ముగ్గురు వ్యక్తులు ఉన్నారు. నేను మీ నుండి ఏదో కోరుకుంటున్నాను, అతను మూడవ వ్యక్తి నుండి ఏదో కోరుకుంటున్నాను మరియు మూడవ వ్యక్తి నా నుండి ఏదో కోరుకుంటున్నాను. మరియు మేము మూడు-మార్గాల నిరీక్షణలో ముగుస్తాము, ఎందుకంటే అవతలి వ్యక్తి వారు చేయవలసిన పనిని పూర్తి చేయడానికి మనమందరం వేచి ఉన్నాము.
మరియు ఇది ఏ వరుసలో జరుగుతుందో పోస్ట్గ్రెస్కు తెలుసు. కాబట్టి ఇది మీకు క్రింది సందేశాన్ని ఇస్తుంది, ఇది మీకు మూడు ఇన్పుట్లు ఒకదానికొకటి నిరోధించే సమస్య ఉందని చూపిస్తుంది. మరియు ఇక్కడ ఎటువంటి పరిమితులు లేవు. 20 ఎంట్రీలు ఒకదానికొకటి బ్లాక్ అయ్యే సందర్భం ఇది కావచ్చు.
తదుపరి సమస్య సీరియలైజ్ చేయదగినది.
ప్రత్యేక క్రమీకరించదగిన లాక్ అయితే.
మరియు మేము 719కి తిరిగి వస్తాము. దీని అవుట్పుట్ చాలా సాధారణమైనది.
మరియు మీరు లావాదేవీని సీరియలైజ్ చేయగలిగేలా చేయడానికి క్లిక్ చేయవచ్చు.
మరియు మీరు ఇప్పుడు వేరే రకమైన SA లాక్ని కలిగి ఉన్నారని మీరు గ్రహించారు - దీని అర్థం సీరియలైజ్ చేయదగినది.
కాబట్టి మేము SARieadLock అనే కొత్త రకం లాక్ని కలిగి ఉన్నాము, ఇది సీరియల్ లాక్ మరియు మీరు సీరియల్లలోకి ప్రవేశించడానికి అనుమతిస్తుంది.
మరియు మీరు ప్రత్యేక సూచికలను కూడా చేర్చవచ్చు.
ఈ పట్టికలో మనకు ప్రత్యేకమైన సూచికలు ఉన్నాయి.
నేను ఇక్కడ నంబర్ 2ని ఉంచినట్లయితే, నా దగ్గర 2 ఉంది. కానీ చాలా ఎగువన, నేను మరొక 2ని ఉంచాను. మరియు 721కి ప్రత్యేకమైన లాక్ ఉందని మీరు చూడవచ్చు. కానీ ఇప్పుడు 722 దాని ఆపరేషన్ను పూర్తి చేయడానికి 721 కోసం వేచి ఉంది, ఎందుకంటే 2కి ఏమి జరుగుతుందో అది 721ని చొప్పించదు.
మరియు మేము ఉపవిమర్శ చేస్తే.
ఇక్కడ మనకు 723 ఉన్నాయి.
మరియు మేము పాయింట్ని సేవ్ చేసి, దానిని అప్డేట్ చేస్తే, మనకు కొత్త లావాదేవీ ID వస్తుంది. ఇది మీరు తెలుసుకోవలసిన ప్రవర్తన యొక్క మరొక నమూనా. మేము దీన్ని తిరిగి ఇస్తే, లావాదేవీ ID తీసివేయబడుతుంది. 724 బయలుదేరుతోంది. కానీ ఇప్పుడు మన దగ్గర 725 ఉన్నాయి.
కాబట్టి నేను ఇక్కడ ఏమి చేయడానికి ప్రయత్నిస్తున్నాను? మీరు కనుగొనగలిగే అసాధారణ తాళాల ఉదాహరణలను మీకు చూపించడానికి నేను ప్రయత్నిస్తున్నాను: ఇది సీరియలైజ్ చేయదగిన లాక్లు లేదా SAVEPOINT అయినా, ఇవి లాక్ టేబుల్లో కనిపించే వివిధ రకాల లాక్లు.
ఇది pg_advisory_lock కలిగిన స్పష్టమైన (స్పష్టమైన) తాళాల సృష్టి.
మరియు మీరు నిరోధించే రకం సలహాగా జాబితా చేయబడిందని మీరు చూస్తారు. మరియు ఇక్కడ అది ఎరుపు రంగులో "సలహా" అని చెప్పింది. మరియు మీరు ఏకకాలంలో pg_advisory_unlockతో ఇలా బ్లాక్ చేయవచ్చు.
మరియు ముగింపులో, నేను మీకు మరో అద్భుతమైన విషయం చూపించాలనుకుంటున్నాను. నేను మరొక వీక్షణను సృష్టిస్తాను. కానీ నేను pg_stat_activity టేబుల్తో pg_locks పట్టికలో చేరతాను. మరియు నేను దీన్ని ఎందుకు చేయాలనుకుంటున్నాను? ఎందుకంటే ఇది ప్రస్తుత సెషన్లన్నింటినీ చూడటానికి మరియు చూడటానికి మరియు వారు ఎలాంటి తాళాల కోసం ఎదురు చూస్తున్నారో చూడటానికి నన్ను అనుమతిస్తుంది. మరియు మేము లాక్ టేబుల్ మరియు ప్రశ్న పట్టికను కలిపి ఉంచినప్పుడు ఇది చాలా ఆసక్తికరంగా ఉంటుంది.
మరియు ఇక్కడ మనం pg_stat_viewని సృష్టిస్తాము.
మరియు మేము వరుసను ఒక్కొక్కటిగా నవీకరిస్తాము. మరియు ఇక్కడ మనం 724ని చూస్తాము. ఆపై మన వరుసను మూడుకి అప్డేట్ చేస్తాము. మరియు మీరు ఇప్పుడు ఇక్కడ ఏమి చూస్తున్నారు? ఇవి అభ్యర్థనలు, అనగా ఎడమ కాలమ్లో జాబితా చేయబడిన అభ్యర్థనల మొత్తం జాబితాను మీరు చూస్తారు. ఆపై కుడి వైపున మీరు అడ్డంకులు మరియు అవి సృష్టించే వాటిని చూడవచ్చు. మరియు ఇది మీకు మరింత స్పష్టంగా ఉంటుంది, తద్వారా మీరు ప్రతి సెషన్కు తిరిగి వెళ్లాల్సిన అవసరం లేదు మరియు మీరు అందులో చేరాలా వద్దా అని చూడండి. వారు మన కోసం చేస్తారు.
చాలా ఉపయోగకరమైన మరొక లక్షణం pg_blocking_pids
. మీరు బహుశా ఆమె గురించి ఎప్పుడూ వినలేదు. ఆమె ఏమి చేస్తున్నది? ఈ సెషన్ 11740 కోసం ఇది ఏ నిర్దిష్ట ప్రాసెస్ IDల కోసం వేచి ఉందో చెప్పడానికి ఇది మమ్మల్ని అనుమతిస్తుంది. మరియు 11740 724 కోసం వేచి ఉందని మీరు చూడవచ్చు. మరియు 724 చాలా ఎగువన ఉంది. మరియు 11306 అనేది మీ ప్రాసెస్ ID. ముఖ్యంగా, ఈ ఫంక్షన్ మీ లాక్ టేబుల్ గుండా వెళుతుంది. మరియు ఇది కొంచెం క్లిష్టంగా ఉందని నాకు తెలుసు, కానీ మీరు దానిని అర్థం చేసుకోగలుగుతారు. ముఖ్యంగా ఈ ఫంక్షన్ ఈ లాక్ టేబుల్ గుండా వెళుతుంది మరియు ఈ ప్రాసెస్ ID వేచి ఉన్న లాక్లు ఎక్కడ ఇవ్వబడిందో కనుగొనడానికి ప్రయత్నిస్తుంది. మరియు లాక్ కోసం వేచి ఉన్న ప్రాసెస్లో ఏ ప్రాసెస్ ID ఉందో గుర్తించడానికి కూడా ఇది ప్రయత్నిస్తుంది. కాబట్టి మీరు ఈ ఫంక్షన్ను అమలు చేయవచ్చు pg_blocking_pids
.
మరియు ఇది చాలా ఉపయోగకరంగా ఉంటుంది. మేము దీన్ని వెర్షన్ 9.6లో మాత్రమే జోడించాము, కాబట్టి ఈ ఫీచర్ కేవలం 5 సంవత్సరాల పాతది, కానీ ఇది చాలా చాలా ఉపయోగకరంగా ఉంది. మరియు అదే రెండవ అభ్యర్థనకు వర్తిస్తుంది. మనం చూడవలసిన వాటిని సరిగ్గా చూపుతుంది.
నేను మీతో మాట్లాడాలనుకున్నది ఇదే. మరియు నేను ఊహించినట్లుగా, చాలా స్లయిడ్లు ఉన్నందున మేము మా సమయాన్ని ఉపయోగించాము. మరియు స్లయిడ్లు డౌన్లోడ్ చేసుకోవడానికి అందుబాటులో ఉన్నాయి. నేను ఇక్కడ ఉన్నందుకు ధన్యవాదాలు చెప్పాలనుకుంటున్నాను. మీరు మిగిలిన కాన్ఫరెన్స్ని ఆనందిస్తారని నేను ఖచ్చితంగా అనుకుంటున్నాను, చాలా ధన్యవాదాలు!
ప్రశ్నలు:
ఉదాహరణకు, నేను అడ్డు వరుసలను నవీకరించడానికి ప్రయత్నిస్తుంటే మరియు రెండవ సెషన్ మొత్తం పట్టికను తొలగించడానికి ప్రయత్నిస్తుంటే. నేను అర్థం చేసుకున్నంత వరకు, ఇంటెంట్ లాక్ లాంటిది ఉండాలి. పోస్ట్గ్రెస్లో అలాంటిది ఉందా?
చాలా ప్రారంభానికి తిరిగి వెళ్దాం. మీరు ఏదైనా చేసినప్పుడు, ఉదాహరణకు మీరు SELECT చేసినప్పుడు, మేము AccessShareLockని జారీ చేస్తాము. మరియు ఇది పట్టికను పడిపోకుండా నిరోధిస్తుంది. కాబట్టి మీరు ఉదాహరణకు, పట్టికలోని అడ్డు వరుసను అప్డేట్ చేయాలనుకుంటే లేదా అడ్డు వరుసను తొలగించాలనుకుంటే, మీరు ఈ AccessShareLockని మొత్తం టేబుల్పై మరియు అడ్డు వరుసలో పట్టుకున్నందున ఎవరైనా మొత్తం పట్టికను ఒకేసారి తొలగించలేరు. మరియు మీరు పూర్తి చేసిన తర్వాత, వారు దానిని తొలగించగలరు. కానీ మీరు నేరుగా అక్కడ ఏదైనా మార్చినప్పుడు, వారు దానిని చేయలేరు.
మళ్ళీ చేద్దాం. తొలగింపు ఉదాహరణకి వెళ్దాం. మరియు మొత్తం పట్టిక పైన ఉన్న వరుసలో ప్రత్యేకమైన లాక్ ఎలా ఉందో మీరు చూస్తారు.
ఇది లాక్ ప్రత్యేకమైనదిగా కనిపిస్తుంది, సరియైనదా?
అవును, అది కనిపిస్తుంది. మీరు ఏమి మాట్లాడుతున్నారో నాకు అర్థమైంది. నేను సెలెక్ట్ చేస్తే, నాకు షేర్ఎక్స్క్లూజివ్ ఉందని, ఆపై దాన్ని రో ఎక్స్క్లూజివ్గా చేస్తానని మీరు అంటున్నారు, అది సమస్యగా మారుతుందా? కానీ ఆశ్చర్యకరంగా ఇది సమస్య కాదు. ఇది లాక్ డిగ్రీని పెంచుతున్నట్లు కనిపిస్తోంది, కానీ తప్పనిసరిగా నేను తొలగింపును నిరోధించే లాక్ని కలిగి ఉన్నాను. ఇప్పుడు, నేను ఈ లాక్ని మరింత శక్తివంతం చేసినప్పుడు, అది ఇప్పటికీ తొలగింపును నిరోధిస్తుంది. కాబట్టి నేను పైకి వెళ్లడం ఇష్టం లేదు. అంటే, ఇది తక్కువ స్థాయిలో ఉన్నప్పుడు కూడా జరగకుండా నిరోధించింది, కాబట్టి నేను దాని స్థాయిని పెంచినప్పుడు అది ఇప్పటికీ పట్టికను తొలగించకుండా నిరోధిస్తుంది.
మీరు ఏమి మాట్లాడుతున్నారో నాకు అర్థమైంది. ఇక్కడ లాక్ ఎస్కలేషన్ కేసు ఏదీ లేదు, ఇక్కడ మీరు బలమైన దాన్ని పరిచయం చేయడానికి ఒక లాక్ని వదులుకోవడానికి ప్రయత్నిస్తున్నారు. ఇక్కడ ఇది కేవలం బోర్డు అంతటా ఈ నివారణను పెంచుతుంది, కాబట్టి ఇది ఎటువంటి సంఘర్షణకు కారణం కాదు. అయితే ఇది మంచి ప్రశ్న. దీన్ని అడిగినందుకు చాలా ధన్యవాదాలు!
మనకు అనేక సెషన్లు, అధిక సంఖ్యలో వినియోగదారులు ఉన్నప్పుడు ప్రతిష్టంభన పరిస్థితిని నివారించడానికి మనం ఏమి చేయాలి?
పోస్ట్గ్రెస్ ప్రతిష్టంభన పరిస్థితులను స్వయంచాలకంగా గమనిస్తుంది. మరియు ఇది సెషన్లలో ఒకదానిని స్వయంచాలకంగా తొలగిస్తుంది. డెడ్ బ్లాకింగ్ను నివారించడానికి ఏకైక మార్గం అదే క్రమంలో వ్యక్తులను బ్లాక్ చేయడం. కాబట్టి మీరు మీ అప్లికేషన్ను చూసినప్పుడు, తరచుగా డెడ్లాక్లకు కారణం... నేను రెండు వేర్వేరు విషయాలను బ్లాక్ చేయాలనుకుంటున్నాను అని ఊహిద్దాం. ఒక అప్లికేషన్ టేబుల్ 1ని లాక్ చేస్తుంది మరియు మరొక అప్లికేషన్ 2ని లాక్ చేస్తుంది, ఆపై టేబుల్ 1ని లాక్ చేస్తుంది. మరియు డెడ్లాక్లను నివారించడానికి సులభమైన మార్గం ఏమిటంటే మీ అప్లికేషన్ని చూసి, అన్ని అప్లికేషన్లలో లాకింగ్ ఒకే క్రమంలో జరిగేలా చూసుకోవడం. మరియు ఇది సాధారణంగా 80% సమస్యలను తొలగిస్తుంది, ఎందుకంటే అన్ని రకాల వ్యక్తులు ఈ అప్లికేషన్లను వ్రాస్తారు. మరియు మీరు వాటిని అదే క్రమంలో బ్లాక్ చేస్తే, మీరు ప్రతిష్టంభన పరిస్థితిని ఎదుర్కోరు.
మీ పనితీరుకు చాలా ధన్యవాదాలు! మీరు వాక్యూమ్ ఫుల్ గురించి మాట్లాడారు మరియు నేను సరిగ్గా అర్థం చేసుకున్నట్లయితే, వాక్యూమ్ ఫుల్ అనేది ప్రత్యేక స్టోరేజ్లోని రికార్డ్ల క్రమాన్ని వక్రీకరిస్తుంది, కాబట్టి అవి ప్రస్తుత రికార్డ్లను మార్చకుండా ఉంచుతాయి. వాక్యూమ్ ఫుల్ ప్రత్యేక లాక్ యాక్సెస్ను ఎందుకు తీసుకుంటుంది మరియు ఇది వ్రాత కార్యకలాపాలతో ఎందుకు విరుద్ధంగా ఉంటుంది?
అది మంచి ప్రశ్న. కారణం వాక్యూమ్ ఫుల్ టేబుల్ను తీసుకుంటుంది. మరియు మేము తప్పనిసరిగా పట్టిక యొక్క క్రొత్త సంస్కరణను సృష్టిస్తున్నాము. మరియు పట్టిక కొత్తగా ఉంటుంది. ఇది పట్టిక యొక్క పూర్తిగా కొత్త వెర్షన్ అవుతుంది. మరియు సమస్య ఏమిటంటే, మనం దీన్ని చేసినప్పుడు, కొత్త పట్టికను చూడాల్సిన అవసరం ఉన్నందున వ్యక్తులు దానిని చదవకూడదనుకుంటాము. కాబట్టి ఇది మునుపటి ప్రశ్నకు కనెక్ట్ అవుతుంది. మేము అదే సమయంలో చదవగలిగితే, మేము దానిని తరలించలేము మరియు వ్యక్తులను కొత్త పట్టికకు మళ్లించలేము. ప్రతి ఒక్కరూ ఈ పట్టికను చదవడం ముగించే వరకు మేము వేచి ఉండవలసి ఉంటుంది మరియు ఇది తప్పనిసరిగా లాక్ ప్రత్యేక పరిస్థితి.
ప్రతి ఒక్కరినీ కొత్త కాపీకి తరలించడానికి చివరిలో మాకు ప్రత్యేకమైన లాక్ అవసరమని మాకు తెలుసు కాబట్టి మేము మొదటి నుండి లాక్ చేసాము. కాబట్టి మేము దీనిని సమర్థవంతంగా పరిష్కరించగలము. మరియు మేము ఏకకాల సూచికతో ఈ విధంగా చేస్తాము. కానీ దీన్ని చేయడం చాలా కష్టం. మరియు ఇది లాక్ ఎక్స్క్లూజివ్ గురించి మీ మునుపటి ప్రశ్నకు చాలా సంబంధించినది.
పోస్ట్గ్రెస్కి లాకింగ్ గడువును జోడించడం సాధ్యమేనా? Oracleలో, నేను, ఉదాహరణకు, "అప్డేట్ చేయడానికి ఎంచుకోండి" అని వ్రాసి, అప్డేట్ చేయడానికి ముందు 50 సెకన్లు వేచి ఉండగలను. ఇది అప్లికేషన్ కోసం మంచిది. కానీ పోస్ట్గ్రెస్లో, నేను దీన్ని వెంటనే చేయాలి మరియు అస్సలు వేచి ఉండకూడదు లేదా కొంత సమయం వరకు వేచి ఉండాలి.
అవును, మీరు మీ లాక్లలో, మీ లాక్లలో గడువు ముగింపుని ఎంచుకోవచ్చు. మీరు వెంటనే లాక్ని పొందలేకపోతే... నో వే కమాండ్ని కూడా జారీ చేయవచ్చు. అందువల్ల, లాక్ సమయం ముగిసింది లేదా దీన్ని చేయడానికి మిమ్మల్ని అనుమతించే మరేదైనా. ఇది వాక్యనిర్మాణ స్థాయిలో చేయలేదు. ఇది సర్వర్లో వేరియబుల్గా చేయబడుతుంది. కొన్నిసార్లు ఇది ఉపయోగించబడదు.
మీరు స్లయిడ్ 75ని తెరవగలరా?
అవును.
మరియు నా ప్రశ్న క్రిందిది. రెండు నవీకరణ ప్రక్రియలు 703ని ఎందుకు ఆశిస్తున్నాయి?
మరియు ఇది ఒక గొప్ప ప్రశ్న. పోస్ట్గ్రెస్ దీన్ని ఎందుకు చేస్తుందో నాకు అర్థం కాలేదు. కానీ 703 సృష్టించబడినప్పుడు, అది 702ని అంచనా వేసింది. మరియు 704 మరియు 705 కనిపించినప్పుడు, వారు ఏమి ఆశిస్తున్నారో వారికి తెలియనట్లు కనిపిస్తోంది ఎందుకంటే అక్కడ ఇంకా ఏమీ లేదు. మరియు పోస్ట్గ్రెస్ దీన్ని ఈ విధంగా చేస్తుంది: మీరు లాక్ని పొందలేనప్పుడు, "మిమ్మల్ని ప్రాసెస్ చేయడంలో ప్రయోజనం ఏమిటి?" అని వ్రాస్తారు, ఎందుకంటే మీరు ఇప్పటికే ఎవరి కోసం ఎదురు చూస్తున్నారు. కాబట్టి మేము దానిని గాలిలో వేలాడదీయనివ్వండి, అది అప్డేట్ చేయదు. అయితే ఇక్కడ ఏం జరిగింది? 702 ప్రక్రియను పూర్తి చేసి, 703 దాని లాక్ని అందుకున్న వెంటనే, సిస్టమ్ తిరిగి వచ్చింది. మరియు ఇప్పుడు మాకు ఇద్దరు వ్యక్తులు వేచి ఉన్నారని ఆమె చెప్పింది. ఆపై వాటిని కలిసి అప్డేట్ చేద్దాం. మరియు ఇద్దరూ ఆశిస్తున్నారని సూచిస్తాము.
పోస్ట్గ్రెస్ ఇలా ఎందుకు చేస్తుందో నాకు తెలియదు. అయితే ఎఫ్ అనే సమస్య ఉంది.... ఇది రష్యన్ భాషలో ఒక పదం కాదని నాకు అనిపిస్తోంది. కోట కోసం ఎదురుచూసే 20 మంది అధికారులు ఉన్నప్పటికీ, ప్రతి ఒక్కరూ ఒక కోట కోసం ఎదురుచూస్తున్నప్పుడు ఇది జరుగుతుంది. మరియు అకస్మాత్తుగా వారందరూ ఒకే సమయంలో మేల్కొంటారు. మరియు ప్రతి ఒక్కరూ ప్రతిస్పందించడానికి ప్రయత్నించడం ప్రారంభిస్తారు. కానీ సిస్టం ప్రతి ఒక్కరూ 703 కోసం వేచి ఉండేలా చేస్తుంది. ఎందుకంటే వారందరూ వేచి ఉన్నారు మరియు మేము వెంటనే వారందరినీ వరుసలో ఉంచుతాము. మరియు దీని తర్వాత ఉత్పత్తి చేయబడిన ఏదైనా ఇతర కొత్త అభ్యర్థన కనిపించినట్లయితే, ఉదాహరణకు, 707, అప్పుడు మళ్లీ శూన్యత ఉంటుంది.
మరియు ఈ దశలో 702 703 కోసం వేచి ఉంది మరియు ఆ తర్వాత వచ్చిన వారందరికీ ఈ రంగంలో ప్రవేశం ఉండదు అని చెప్పడానికి ఇది చేసినట్లు నాకు అనిపిస్తుంది. కానీ మొదటి వెయిటర్ వెళ్లిన వెంటనే, అప్డేట్కు ముందు ఆ క్షణంలో వేచి ఉన్న వారందరికీ ఒకే టోకెన్ అందుతుంది. కాబట్టి ఇది జరిగిందని నేను భావిస్తున్నాను, తద్వారా అవి సరిగ్గా ఆర్డర్ చేయబడిన క్రమంలో మనం ప్రాసెస్ చేయగలము.
నేను ఎల్లప్పుడూ దీనిని ఒక వింత దృగ్విషయంగా చూసాను. ఎందుకంటే ఇక్కడ, ఉదాహరణకు, మేము వాటిని అస్సలు జాబితా చేయము. కానీ కొత్త తాళం ఇచ్చినప్పుడల్లా వెయిటింగ్లో ఉన్నవాళ్లందరినీ చూస్తూనే ఉంటాం అనిపిస్తుంది. అప్పుడు మేము వాటన్నింటినీ వరుసలో ఉంచుతాము. ఆపై వచ్చే ఏదైనా కొత్తది తదుపరి వ్యక్తి ప్రాసెస్ చేయడం పూర్తయిన తర్వాత మాత్రమే క్యూలోకి వస్తుంది. చాలా మంచి ప్రశ్న. మీ ప్రశ్నకు చాలా ధన్యవాదాలు!
705 704ని ఆశించినప్పుడు ఇది చాలా లాజికల్ అని నాకు అనిపిస్తోంది.
కానీ ఇక్కడ సమస్య క్రిందిది. సాంకేతికంగా, మీరు ఒకటి లేదా మరొకటి మేల్కొలపవచ్చు. కాబట్టి మేము ఒకటి లేదా మరొకటి మేల్కొంటాము. కానీ వ్యవస్థలో ఏమి జరుగుతుంది? ఎగువన ఉన్న 703 తన స్వంత లావాదేవీ IDని ఎలా బ్లాక్ చేసిందో మీరు చూడవచ్చు. పోస్ట్గ్రెస్ ఈ విధంగా పనిచేస్తుంది. మరియు 703 దాని స్వంత లావాదేవీ ID ద్వారా బ్లాక్ చేయబడింది, కాబట్టి ఎవరైనా వేచి ఉండాలనుకుంటే, వారు 703 కోసం వేచి ఉంటారు. మరియు, సారాంశంలో, 703 పూర్తవుతుంది. మరియు అది పూర్తయిన తర్వాత మాత్రమే ప్రక్రియలలో ఒకటి మేల్కొంటుంది. మరియు ఈ ప్రక్రియ ఖచ్చితంగా ఏమిటో మాకు తెలియదు. అప్పుడు మేము ప్రతిదీ క్రమంగా ప్రాసెస్ చేస్తాము. కానీ ఏ ప్రక్రియ మొదట మేల్కొలిపిందో స్పష్టంగా లేదు, ఎందుకంటే ఇది ఈ ప్రక్రియలలో ఏదైనా కావచ్చు. ముఖ్యంగా, మేము ఇప్పుడు ఈ ప్రక్రియలలో దేనినైనా మేల్కొలపగలమని చెప్పే షెడ్యూలర్ని కలిగి ఉన్నాము. మేము యాదృచ్ఛికంగా ఒకదాన్ని ఎంచుకుంటాము. కాబట్టి రెండింటినీ గమనించాలి, ఎందుకంటే వాటిలో దేనినైనా మనం మేల్కొల్పగలము.
మరియు సమస్య ఏమిటంటే మనకు CP-అనంతం ఉంది. అందువల్ల, మేము తరువాతి నుండి మేల్కొలపడానికి చాలా అవకాశం ఉంది. మరియు ఉదాహరణకు, మేము తరువాతి వ్యక్తిని మేల్కొల్పినట్లయితే, ఇప్పుడే బ్లాక్ను పొందిన వ్యక్తి కోసం మేము వేచి ఉంటాము, కాబట్టి ఎవరు మొదట మేల్కొంటారో మేము నిర్ణయించలేము. మేము అలాంటి పరిస్థితిని సృష్టిస్తాము మరియు సిస్టమ్ వాటిని యాదృచ్ఛిక క్రమంలో మేల్కొల్పుతుంది.
ఉన్నాయి
మూలం: www.habr.com