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

Postgresql - विशाल तालिका (100 मिलियन पंक्तियों) को अद्यतन करने के लिए कैसे गति करें?

चूंकि आप दो बड़ी तालिकाओं में शामिल हो रहे हैं और ऐसी कोई स्थिति नहीं है जो पंक्तियों को फ़िल्टर कर सकती है, केवल कुशल जुड़ने की रणनीति हैश जॉइन होगी, और कोई भी इंडेक्स इसमें मदद नहीं कर सकता है।

सबसे पहले एक टेबल का अनुक्रमिक स्कैन होगा, जिसमें से हैश संरचना बनाई गई है, फिर दूसरी टेबल पर अनुक्रमिक स्कैन होगा, और हैश की प्रत्येक पंक्ति के लिए जांच की जाएगी। कोई इंडेक्स इसमें कैसे मदद कर सकता है?

आप इस तरह के ऑपरेशन में लंबा समय लगने की उम्मीद कर सकते हैं, लेकिन कुछ तरीके हैं जिनसे आप ऑपरेशन को तेज कर सकते हैं:

  • tx_input1 . पर सभी इंडेक्स और बाधाओं को हटा दें शुरू करने से पहले। आपकी क्वेरी उन उदाहरणों में से एक है जहां एक इंडेक्स बिल्कुल भी मदद नहीं करता है, लेकिन वास्तव में दर्द करता है प्रदर्शन, क्योंकि अनुक्रमणिका को तालिका के साथ अद्यतन किया जाना है। UPDATE . के साथ काम पूरा करने के बाद अनुक्रमणिका और बाधाओं को फिर से बनाएँ . टेबल पर मौजूद इंडेक्स की संख्या के आधार पर, आप अच्छे से बड़े प्रदर्शन की उम्मीद कर सकते हैं।

  • work_mem बढ़ाएँ SET . के साथ इस एक ऑपरेशन के लिए पैरामीटर जितना हो सके उतना ऊंचा आदेश दें। हैश ऑपरेशन जितनी अधिक मेमोरी का उपयोग कर सकता है, उतनी ही तेजी से होगा। इतनी बड़ी तालिका के साथ आपके पास शायद अभी भी अस्थायी फ़ाइलें होंगी, लेकिन आप अभी भी एक अच्छे प्रदर्शन की उम्मीद कर सकते हैं।

  • बढ़ाएँ checkpoint_segments (या max_wal_size संस्करण 9.6 से) को उच्च मान तक ले जाएं ताकि UPDATE के दौरान कम चौकियां हों ऑपरेशन।

  • सुनिश्चित करें कि दोनों तालिकाओं पर तालिका आँकड़े सटीक हैं, ताकि PostgreSQL हैश बकेट की संख्या के निर्माण के लिए एक अच्छा अनुमान लगा सके।

UPDATE के बाद , यदि यह बड़ी संख्या में पंक्तियों को प्रभावित करता है, तो आप VACUUM (FULL) चलाने पर विचार कर सकते हैं tx_input1 . पर परिणामी टेबल ब्लोट से छुटकारा पाने के लिए। यह टेबल को अधिक समय के लिए लॉक कर देगा, इसलिए इसे रखरखाव विंडो के दौरान करें। यह तालिका के आकार को कम करेगा और परिणामस्वरूप क्रमिक स्कैन को गति देगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django ORM PostgreSQL अनुक्रमों को गलत तरीके से पढ़ रहा है?

  2. Postgresql के लिए कार्य

  3. Psycopg2, Postgresql, Python:थोक-सम्मिलित करने का सबसे तेज़ तरीका

  4. PostgreSQL कॉलम foo मौजूद नहीं है जहां foo मान है

  5. टेबल्स और इंडेक्स बनाम एचडीडी और एसएसडी