PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेस्क्ल गतिरोध

ये दो टिप्पणियाँ समान content_id के साथ सम्मिलित की जा रही हैं। केवल टिप्पणी डालने से सामग्री पंक्ति पर एक SHARE लॉक निकल जाएगा, ताकि पहला लेन-देन पूरा होने तक उस पंक्ति को हटाने वाले किसी अन्य लेन-देन को रोका जा सके।

हालाँकि, ट्रिगर तब लॉक को EXCLUSIVE में अपग्रेड करने के लिए आगे बढ़ता है, और इसे समान प्रक्रिया को निष्पादित करने वाले समवर्ती लेनदेन द्वारा अवरुद्ध किया जा सकता है। घटनाओं के निम्नलिखित क्रम पर विचार करें:

Txn 2754                      Txn 2053
Insert Comment
                              Insert Comment
Lock Content#935967 SHARE
  (performed by fkey)
                              Lock Content#935967 SHARE
                                (performed by fkey)
Trigger
Lock Content#935967 EXCLUSIVE
(blocks on 2053's share lock)
                              Trigger
                              Lock Content#935967 EXCLUSIVE
                              (blocks on 2754's share lock)

तो- गतिरोध।

एक उपाय यह है कि तुरंत पहले . सामग्री पंक्ति पर एक विशेष लॉक लें टिप्पणी डालने। यानी

SELECT 1 FROM content WHERE content.id = 935967 FOR UPDATE
INSERT INTO comment(.....)

एक अन्य समाधान बस इस "कैश्ड काउंट्स" पैटर्न से पूरी तरह से बचने के लिए है, सिवाय इसके कि आप यह साबित कर सकें कि यह प्रदर्शन के लिए आवश्यक है। यदि ऐसा है, तो कैश्ड काउंट को कॉन्टेंट टेबल के अलावा कहीं और रखने पर विचार करें-- उदा. काउंटर के लिए एक समर्पित टेबल। यह हर बार एक टिप्पणी जोड़े जाने पर सामग्री तालिका में अद्यतन ट्रैफ़िक में भी कटौती करेगा। या हो सकता है कि बस गिनती का दोबारा चयन करें और एप्लिकेशन में memcached का उपयोग करें। इसमें कोई दो राय नहीं है कि आप जहां कहीं भी स्टोर करते हैं, यह कैश्ड काउंट एक चोक पॉइंट होने वाला है, इसे सुरक्षित रूप से अपडेट करना होगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. varchar के लिए array_agg () का उपयोग कैसे करें []

  2. बिटमैप हीप स्कैन प्रदर्शन

  3. मैं Postgres में किसी तालिका को कैसे बदलूँ?

  4. मैं नए PostgreSQL JSON डेटाटाइप के अंदर फ़ील्ड को कैसे संशोधित करूं?

  5. PostgreSQL लेनदेन में लंबित संचालन की जांच कैसे करें