የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ሪፖርቱ የሚፈቅዱ አንዳንድ አቀራረቦችን ያቀርባል በቀን በሚሊዮን የሚቆጠሩ ሲኖሩ የSQL መጠይቆችን አፈጻጸም ይቆጣጠሩ፣ እና በመቶዎች የሚቆጠሩ ቁጥጥር የሚደረግባቸው የ PostgreSQL አገልጋዮች አሉ።

ምን አይነት ቴክኒካል መፍትሄዎች እንደዚህ አይነት የመረጃ መጠን በብቃት እንድንሰራ ያስችለናል እና እንዴት ለተራ ገንቢ ህይወትን ቀላል ያደርገዋል።


ፍላጎት ያለው ማን ነው የተወሰኑ ችግሮች እና የተለያዩ የማመቻቸት ዘዴዎች ትንተና በ PostgreSQL ውስጥ የSQL ጥያቄዎች እና የተለመዱ የ DBA ተግባራትን መፍታት - እርስዎም ይችላሉ። ተከታታይ መጣጥፎችን ይመልከቱ በዚህ ርዕስ ላይ.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)
ስሜ ኪሪል ቦሮቪኮቭ እባላለሁ, እኔ እወክላለሁ "Tensor" ኩባንያ. በተለይም በኩባንያችን ውስጥ ከመረጃ ቋቶች ጋር በመስራት ረገድ ልዩ ነኝ።

ዛሬ በጥያቄ ማመቻቸት ላይ እንዴት እንደተሰማራ እነግርዎታለሁ, የአንድ ነጠላ ጥያቄን አፈፃፀም "ማንሳት" በማይፈልጉበት ጊዜ, ነገር ግን ችግሩን በጅምላ ይፍቱ. በሚሊዮኖች የሚቆጠሩ ጥያቄዎች ሲኖሩ እና አንዳንድ ማግኘት ያስፈልግዎታል የመፍታት አቀራረቦች ይህ ትልቅ ችግር.

በአጠቃላይ "Tensor" ለአንድ ሚሊዮን ደንበኞቻችን ነው VLSI - የእኛ መተግበሪያ: የኮርፖሬት ማህበራዊ አውታረመረብ ፣ ለቪዲዮ ግንኙነት መፍትሄዎች ፣ ለውስጣዊ እና ውጫዊ ሰነዶች አስተዳደር ፣ የሂሳብ አያያዝ ስርዓቶች ለሂሳብ አያያዝ እና መጋዘን ፣ ... ይህ ማለት የተቀናጀ የንግድ ሥራ አስተዳደር እንደዚህ ያለ “ሜጋኮምቢን” ፣ በውስጡም ከ 100 በላይ የተለያዩ የውስጥ ፕሮጄክቶች አሉ ። .

ሁሉም በመደበኛነት እንዲሰሩ እና እንዲለማ በመላ አገሪቱ 10 የልማት ማዕከላት አሉን ፣ እነሱ የበለጠ አላቸው ። 1000 ገንቢዎች.

ከ 2008 ጀምሮ ከ PostgreSQL ጋር እየሠራን ነበር እና እኛ የምንሰራውን ብዙ መጠን አከማችተናል - እነዚህ የደንበኛ ውሂብ ፣ ስታቲስቲካዊ ፣ ትንተናዊ ፣ ከውጭ የመረጃ ስርዓቶች መረጃ ናቸው - ከ 400TB በላይ. "በምርት" ውስጥ ብቻ ወደ 250 የሚጠጉ አገልጋዮች ያሉት ሲሆን በአጠቃላይ እኛ የምንቆጣጠራቸው ወደ 1000 የሚጠጉ የመረጃ ቋት አገልጋዮች አሉ።

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

SQL ገላጭ ቋንቋ ነው። አንድ ነገር "እንዴት" እንደሚሰራ ሳይሆን "ምን" ማግኘት እንደሚፈልጉ ይገልጻሉ። ዲቢኤምኤስ መቀላቀልን እንዴት እንደሚሰራ በተሻለ ያውቃል - ጠረጴዛዎችዎን እንዴት ማገናኘት እንደሚቻል ፣ ምን ሁኔታዎችን መጫን እንዳለብዎ ፣ በመረጃ ጠቋሚው ውስጥ ምን እንደሚያልፍ ፣ ምን እንደማያደርግ ...

አንዳንድ ዲቢኤምኤስ ፍንጮችን ይቀበላሉ፡- “አይ፣ እነዚህን ሁለት ጠረጴዛዎች በእንደዚህ አይነት እና እንደዚህ ባለ ወረፋ ይቀላቀሉ”፣ ግን PostgreSQL እንዴት እንደሆነ አያውቅም። ይህ የመሪ ገንቢዎች ንቃተ ህሊና አቋም ነው፡ "ገንቢዎች አንዳንድ አይነት ፍንጮችን እንዲጠቀሙ ከመፍቀድ የመጠይቅ አመቻችውን መጨረስ ይሻላል።"

ነገር ግን PostgreSQL "ውጭ" እራሱን እንዲያስተዳድር ባይፈቅድም, በትክክል ይፈቅዳል ውስጥ ምን እየተከናወነ እንዳለ ይመልከቱጥያቄዎን ሲያሄዱ እና የት ችግሮች እንዳሉበት።

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

በአጠቃላይ፣ ገንቢ [ወደ DBA] ብዙውን ጊዜ በየትኞቹ የተለመዱ ችግሮች ነው የሚመጣው? “እዚህ ጥያቄውን አሟልተናል፣ እና እኛ ዘገምተኞች ነን, ሁሉም ነገር ተንጠልጥሏል, የሆነ ነገር እየተፈጠረ ነው ... አንድ ዓይነት ችግር!

ምክንያቶቹ ሁል ጊዜ ተመሳሳይ ናቸው-

  • ውጤታማ ያልሆነ የመጠይቅ ስልተ ቀመር
    ገንቢው፡- “አሁን በ JOIN በኩል ለእሱ 10 ጠረጴዛዎች በSQL ውስጥ አለኝ…” - እና የእሱ ሁኔታ በተአምራዊ ሁኔታ “ይፈታ” ብሎ ይጠብቃል እና ሁሉንም ነገር በፍጥነት ያገኛል። ነገር ግን ተአምራቶች አይከሰቱም, እና እንደዚህ አይነት ተለዋዋጭነት ያለው ማንኛውም ስርዓት (10 ሰንጠረዦች በአንድ FROM) ሁልጊዜ አንድ ዓይነት ስህተትን ይሰጣል. [ጽሑፍ]
  • ጊዜ ያለፈበት ስታቲስቲክስ
    ጊዜው በተለይ ለ PostgreSQL በጣም ጠቃሚ ነው፣ አንድ ትልቅ የውሂብ ስብስብ በአገልጋዩ ላይ “ያፈሱ” ፣ ጥያቄ ያቅርቡ - እና በጠፍጣፋው ላይ “ወሲብ ይፈትሻል”። ምክንያቱም ትላንትና 10 መዝገቦችን ይዟል, እና ዛሬ 10 ሚሊዮን አሉ, ነገር ግን PostgreSQL እስካሁን ድረስ ይህን አላወቀም, እና ስለዚህ ጉዳይ መነሳሳት አለበት. [ጽሑፍ]
  • በንብረቶች ውስጥ "መሰካት".
    በቂ ዲስክ፣ ማህደረ ትውስታ ወይም የአቀነባባሪው አፈጻጸም በሌለው ደካማ አገልጋይ ላይ ትልቅ እና ከባድ የተጫነ ዳታቤዝ አኖራለሁ። እና ያ ብቻ ነው ... የሆነ ቦታ የአፈፃፀም ጣሪያ አለ ፣ ከዚያ በላይ መዝለል አይችሉም።
  • ማገድ
    አስቸጋሪ ጊዜ፣ ነገር ግን እነሱ ለተለያዩ የማሻሻያ መጠይቆች (INSERT፣ UPDATE፣ DELETE) በጣም ተዛማጅ ናቸው - ይህ የተለየ ትልቅ ርዕስ ነው።

እቅድ አውጡ

… እና ለሁሉም ነገር እኛ እቅድ ያስፈልገዋል! በአገልጋዩ ውስጥ ምን እየተካሄደ እንዳለ ማየት አለብን።

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ለ PostgreSQL የጥያቄ ማስፈጸሚያ እቅድ በጽሑፍ ውክልና ውስጥ የጥያቄ ማስፈጸሚያ ስልተ-ቀመር ዛፍ ነው። በትክክል በእቅድ አውጪው ትንታኔ የተነሳ በጣም ውጤታማ እንደሆነ እውቅና የተሰጠው አልጎሪዝም።

እያንዳንዱ የዛፍ መስቀለኛ መንገድ ኦፕሬሽን ነው፡ መረጃን ከሠንጠረዥ ወይም መረጃ ማውጣት፣ ቢትማፕ መገንባት፣ ሁለት ጠረጴዛዎችን መቀላቀል፣ መቀላቀል፣ መቆራረጥ ወይም ምርጫዎችን ሳያካትት። ጥያቄን ማስፈጸም በዚህ ዛፍ ኖዶች ውስጥ በእግር መሄድ ነው።

የጥያቄ ዕቅዱን ለማግኘት ቀላሉ መንገድ መግለጫውን መፈጸም ነው። EXPLAIN. ከሁሉም እውነተኛ ባህሪያት ጋር ለማግኘት፣ ማለትም በእውነቱ በመሠረቱ ላይ - ጥያቄን ያስፈጽሙ EXPLAIN (ANALYZE, BUFFERS) SELECT ....

መጥፎው ነጥብ: ሲፈጽሙት "እዚህ እና አሁን" ይከሰታል, ስለዚህ ለአካባቢ ማረም ብቻ ተስማሚ ነው. በጠንካራ የውሂብ ፍሰት ስር ያለ አንዳንድ በጣም የተጫነ አገልጋይ ወስደህ ካየህ፡ “ሄይ! እዚህ ቀስ በቀስ አከናውነናልXia ጥያቄ." ከግማሽ ሰዓት በፊት ከአንድ ሰዓት በፊት - እየሮጡ ሳሉ እና ይህን ጥያቄ ከመዝግብ ማስታወሻዎች እያገኙ, ወደ አገልጋዩ ይዘውት ይመለሱ, አጠቃላይ የውሂብ ስብስብዎ እና ስታቲስቲክስዎ ተለውጠዋል. ለማረም ያሂዱት - እና በፍጥነት ይሰራል! እና "ለምን", ለምን እንደሆነ መረዳት አይችሉም ነበር በቀስታ።

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ጥያቄው በአገልጋዩ ላይ በሚፈፀምበት ወቅት በትክክል ምን እንደነበረ ለመረዳት ብልጥ ሰዎች ጽፈዋል ራስ-አብራራ ሞጁል. እሱ በሁሉም በጣም የተለመዱ የ PostgreSQL ስርጭቶች ውስጥ ይገኛል ፣ እና በቀላሉ በማዋቀር ፋይል ውስጥ ሊነቃ ይችላል።

አንዳንድ ጥያቄ ከነገርከው ገደብ በላይ እየሄደ መሆኑን ከተረዳ፣ ያደርጋል የዚህን ጥያቄ እቅድ "ቅጽበተ-ፎቶ" እና ወደ ሎግ አንድ ላይ ይጽፋቸዋል.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

አሁን ሁሉም ነገር ጥሩ ይመስላል፣ ወደ ሎግ ሄደን እዚያ እናያለን ... [የጽሑፍ የግርጌ ልብስ]። ግን ስለሱ ምንም ማለት አንችልም, ይህ በጣም ጥሩ እቅድ ከመሆኑ እውነታ በስተቀር, ምክንያቱም ለማጠናቀቅ 11ms ወስዷል.

ሁሉም ነገር ጥሩ ይመስላል - ነገር ግን በእውነቱ ምን እንደተፈጠረ ግልጽ የሆነ ነገር የለም. ከአጠቃላይ ሰዓቱ በተጨማሪ ምንም የተለየ ነገር አናይም። ምክንያቱም እንዲህ ዓይነቱን "ብራት" ግልጽ ጽሑፍ መመልከት በአጠቃላይ ማራኪ ነው.

ግን ግልጽ ባይሆንም, የማይመች ቢሆንም, ተጨማሪ መሰረታዊ ችግሮች አሉ.

  • መስቀለኛ መንገድ ያመለክታል በጠቅላላው የንዑስ ዛፍ ሀብቶች ላይ ድምር በእሱ ሾር. ያም ማለት እዚህ በተለይ በዚህ የመረጃ ጠቋሚ ቅኝት ላይ ምን ያህል ጊዜ እንዳጠፋ ለማወቅ በቀላሉ የማይቻል ነው - በእሱ ሾር አንዳንድ ጎጆዎች ካሉ የማይቻል ነው። በውስጣችን “ልጆች” እና ሁኔታዊ ተለዋዋጮች እንዳሉ በተለዋዋጭ ሁኔታ ማየት አለብን፣ CTE - እና ይህን ሁሉ “በአእምሮ” ቀንስ።
  • ሁለተኛው ነጥብ: በመስቀለኛ መንገድ ላይ የተጠቆመው ጊዜ ነው የመስቀለኛ መንገድ የማስፈጸሚያ ጊዜ. ይህ መስቀለኛ መንገድ ብዙ ጊዜ ከተፈፀመ, ለምሳሌ, በሠንጠረዥ መዝገቦች ውስጥ ዑደት, ከዚያም እቅዱ የሉፕስ ብዛት ይጨምራል - የዚህ መስቀለኛ ዑደቶች. ነገር ግን የአቶሚክ ማስፈጸሚያ ጊዜ እራሱ በእቅዱ ውስጥ እንዳለ ይቆያል. ያም ማለት ይህ መስቀለኛ መንገድ በጠቅላላው ምን ያህል እንደተከናወነ ለመረዳት አንድ ሰው አንዱን በሌላው ማባዛት አለበት - እንደገና "በአእምሮ ውስጥ".

በእንደዚህ ዓይነት ሁኔታዎች ውስጥ "በጣም ደካማው ማነው?" በተግባር ከእውነታው የራቀ። ስለዚህ, ገንቢዎቹ እራሳቸው በ "መመሪያው" ውስጥ እንኳን ይጽፋሉ "እቅዱን መረዳቱ መማር ያለበት ጥበብ፣ ልምድ ነው...".

ግን 1000 ገንቢዎች አሉን, እና ይህ ተሞክሮ ለእያንዳንዳቸው ሊተላለፍ አይችልም. እኔ፣ አንተ፣ እሱ - ያውቃሉ፣ ግን እዚያ ያለ አንድ ሰው - ከእንግዲህ የለም። ምናልባት ይማራል፣ ወይም ላይሆን ይችላል፣ ግን አሁን መስራት ያስፈልገዋል - እና ይህን ልምድ ከየት ሊያገኘው ይችላል።

የዕቅድ እይታ

ስለዚህ, እነዚህን ችግሮች ለመቋቋም, እኛ እንደሚያስፈልገን ተገነዘብን የእቅዱን ጥሩ እይታ. [ጽሑፍ]

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

በመጀመሪያ “በገበያ ላይ” ሄድን - በአጠቃላይ ምን እንደሚኖር በይነመረብን እንይ።

ግን በአንጻራዊ ሁኔታ ሲታይ ብዙ ወይም ባነሰ የተገነቡ በአንጻራዊ “ቀጥታ” መፍትሄዎች በጣም ጥቂት ናቸው - በጥሬው አንድ ነገር ማብራሪያ.depesz.com በHubert Lubaczewski. በመስክ መግቢያ ላይ የእቅዱን የጽሑፍ ውክልና “መመገብ” ፣ የተተነተነ ውሂብ ያለው ሳህን ያሳየዎታል-

  • የእራሱ የመስቀለኛ መንገድ ሂደት ጊዜ
  • በጠቅላላው የንዑስ ዛፍ ላይ ጠቅላላ ጊዜ
  • የተገኙት እና በስታቲስቲክስ የሚጠበቁ መዝገቦች ብዛት
  • መስቀለኛ አካል ልሹ

እንዲሁም፣ ይህ አገልግሎት የአገናኞችን ማህደር የማጋራት ችሎታ አለው። እቅድህን እዚያ ወረወረው እና "ሄይ, ቫስያ, ለእርስዎ አገናኝ ነው, እዚያ የሆነ ችግር አለ."

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ግን ትናንሽ ችግሮችም አሉ.

በመጀመሪያ ፣ ከፍተኛ መጠን ያለው “ኮፒ-ለጥፍ”። የምዝግብ ማስታወሻውን አንድ ቁራጭ ወስደህ እዚያ ውስጥ አስቀምጠው, እና እንደገና እና እንደገና.

ሁለተኛ, የተነበበው የውሂብ መጠን ምንም ትንታኔ የለም - የሚያወጡት ተመሳሳይ ቋት EXPLAIN (ANALYZE, BUFFERS)፣ እዚህ አናየውም። በቀላሉ እንዴት መበታተን፣ መረዳት እና ከእነሱ ጋር መስራት እንዳለበት አያውቅም። ብዙ ውሂብ በሚያነቡበት ጊዜ እና በዲስክ እና ውስጠ-ማህደረ ትውስታ መሸጎጫ ላይ በትክክል እየበሰበሰዎት እንዳልሆነ ሲገነዘቡ ይህ መረጃ በጣም አስፈላጊ ነው.

ሦስተኛው አሉታዊ ነጥብ የዚህ ፕሮጀክት በጣም ደካማ ልማት ነው. ድርጊቱ በጣም ትንሽ ነው፣ በየስድስት ወሩ አንድ ጊዜ ከሆነ ጥሩ ነው፣ እና ኮዱ በፐርል ነው።

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ግን እነዚህ ሁሉ "ግጥም" ናቸው, አንድ ሰው በሆነ መንገድ ከዚህ ጋር መኖር ይችላል, ነገር ግን ከዚህ አገልግሎት እንድንርቅ ያደረገን አንድ ነገር አለ. እነዚህ የተለመዱ የጠረጴዛ አገላለጽ (CTE) የመተንተን ስህተቶች እና እንደ InitPlan/SubPlan ያሉ ተለዋዋጭ አንጓዎች ናቸው።

ይህንን ስዕል ካመኑት ለጥያቄው አጠቃላይ የአፈፃፀም ጊዜ በላይ ለእያንዳንዱ ግለሰብ መስቀለኛ መንገድ አጠቃላይ የማስፈጸሚያ ጊዜ አለን። ሁሉም ነገር ቀላል ነው - የዚህን CTE የትውልድ ጊዜ ከCTE Scan node አልቀነሰም።. ስለዚህ, ትክክለኛውን መልስ ከአሁን በኋላ አናውቅም, የ CTE ቅኝት እራሱ ለምን ያህል ጊዜ እንደወሰደ.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ከዚያም የራሳችንን ለመጻፍ ጊዜው እንደደረሰ ተገነዘብን - ሆራይ! እያንዳንዱ ገንቢ “አሁን የራሳችንን እንጽፋለን፣ በጣም ቀላል ይሆናል!” ይላል።

ለድር አገልግሎቶች የተለመደ ቁልል ወስደናል፡ ዋናው በ Node.js + Express፣ በ Bootstrap እና D3.js ላይ ለቆንጆ ሥዕላዊ መግለጫዎች ተስቦ ነበር። እና የምንጠብቀው ነገር ሙሉ በሙሉ ትክክል ነበር - በ 2 ሳምንታት ውስጥ የመጀመሪያውን ምሳሌ አግኝተናል-

  • ብጁ ዕቅድ ተንታኝ
    ያም ማለት አሁን ማንኛውንም እቅድ በ PostgreSQL ከተፈጠሩት በአጠቃላይ መተንተን እንችላለን።
  • ተለዋዋጭ አንጓዎች ትክክለኛ ትንታኔ - CTE ስካን፣ InitPlan፣ SubPlan
  • የመጠባበቂያዎች ስርጭት ትንተና - የውሂብ ገጾች ከማህደረ ትውስታ ፣ ከአካባቢው መሸጎጫ ፣ ከዲስክ የሚነበቡበት
  • ታይነት አግኝቷል
    በምዝግብ ማስታወሻው ውስጥ ሁሉንም ነገር "ለመቆፈር" ሳይሆን "በጣም ደካማ አገናኝ" ወዲያውኑ በሥዕሉ ላይ ለማየት.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

እንደዚህ አይነት ምስል አግኝተናል - ወዲያውኑ በአገባብ ማድመቅ። ግን አብዛኛውን ጊዜ የእኛ ገንቢዎች ከዕቅዱ ሙሉ ውክልና ጋር እየሰሩ አይደሉም፣ ነገር ግን አጭር በሆነ ነገር እየሰሩ ነው። ከሁሉም በላይ, ሁሉንም ቁጥሮች አስቀድመን ወደ ግራ እና ቀኝ ጣልናቸው, እና በመሃል ላይ የመጀመሪያውን መስመር ብቻ ትተናል, ምን አይነት መስቀለኛ መንገድ ነው: CTE Scan, CTE ትውልድ ወይም ሴክ ስካን በአንዳንድ ሳህን መሰረት.

ይህ እኛ የምንጠራው አህጽሮተ ቃል ነው። እቅድ አብነት.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ሌላ ምን ምቹ ይሆናል? ከጠቅላላው ጊዜ ውስጥ የትኛው ድርሻ ለየትኛው መስቀለኛ መንገድ እንደተከፋፈለ ለማየት ምቹ ይሆናል - እና በቀላሉ ወደ ጎን “አጣብቀው” አምባሻ ገበታ.

መስቀለኛ መንገድ ላይ እንጠቁማለን እና እናያለን - ሴክ ስካን ከጠቅላላው ጊዜ ከሩብ ያነሰ የወሰደ ሲሆን ቀሪው 3/4 በCTE Scan ተወስዷል። አስፈሪ! ይህ ስለ CTE Scan "የእሳት መጠን" ትንሽ ማስታወሻ ነው፣ በጥያቄዎችዎ ውስጥ በንቃት ከተጠቀሙባቸው። በጣም ፈጣን አይደሉም - በተለመደው የጠረጴዛ ቅኝት እንኳን ያጣሉ. [ጽሑፍ] [ጽሑፍ]

ግን ብዙውን ጊዜ እንደዚህ ያሉ ሥዕላዊ መግለጫዎች የበለጠ አስደሳች ፣ ውስብስብ ናቸው ፣ ወዲያውኑ ወደ አንድ ክፍል ስንጠቁም ፣ እና ለምሳሌ ፣ አንዳንድ ሴክ ስካን ከግማሽ ጊዜ በላይ “እንደበሉ” እናያለን። በተጨማሪም ፣ በውስጡ አንድ ዓይነት ማጣሪያ ነበረ ፣ ብዙ መዝገቦች በላዩ ላይ ተጥለዋል ... ይህንን ምስል በቀጥታ ለገንቢው መጣል እና “Vasya ፣ እዚህ ሁሉም ነገር መጥፎ ነው! ይወቁ ፣ ይመልከቱ - የሆነ ችግር አለ!

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

በተፈጥሮ, ያለ "መሰቅሰቂያ" ማድረግ አልቻለም.

"የረገጡበት" የመጀመሪያው ነገር የማጠጋጋት ችግር ነበር። በእቅዱ ውስጥ ያለው የእያንዳንዱ አንጓ መስቀለኛ ጊዜ በ1 µs ትክክለኛነት ተጠቁሟል። እና የመስቀለኛ ዑደቶች ብዛት ሲጨምር ፣ ለምሳሌ ፣ 1000 - ከተፈፀመ በኋላ ፣ PostgreSQL “እስከ” ተከፍሏል ፣ ከዚያ ወደ ኋላ ስናሰላ አጠቃላይውን ጊዜ “በ 0.95ms እና 1.05ms መካከል” እናገኛለን ። ቆጠራው ወደ ማይክሮ ሰከንድ ሲሄድ, አሁንም ምንም አይደለም, ነገር ግን ቀድሞውኑ ወደ [ሚሊ] ሴኮንዶች ሲደርስ, "ማን ከማን ምን ያህል እንደበላ" በእቅዱ አንጓዎች መሰረት "ሳይታጠፍ" ይህንን መረጃ ግምት ውስጥ ማስገባት አለብዎት.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ሁለተኛው ነጥብ ፣ የበለጠ የተወሳሰበ ፣ በተለዋዋጭ አንጓዎች መካከል የሀብቶች ስርጭት (እነዚያ ቋቶች) ነው። ለመጀመሪያዎቹ 2 ሳምንታት ለፕሮቶታይፕ ሌላ 4 ሳምንታት አስከፍሎናል።

እንደዚህ አይነት ችግር ማግኘት በጣም ቀላል ነው - እኛ CTE እናደርጋለን እና በውስጡ የሆነ ነገር እናነባለን. በእውነቱ፣ PostgreSQL “ብልጥ” ነው እና ምንም ነገር በቀጥታ እዚያ አያነብም። ከዚያም የመጀመሪያውን መዝገብ ከእሱ እንወስዳለን, እና አንድ መቶ እና መጀመሪያ ከተመሳሳይ CTE ወደ እሱ እንወስዳለን.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

እቅዱን ተመልክተናል እና ተረድተናል - በሚገርም ሁኔታ 3 ቋቶች (የውሂብ ገፆች) በሴክ ስካን "የተበላ"፣ 1 ተጨማሪ በCTE Scan እና 2 ተጨማሪ በሁለተኛው የCTE ስካን ነበረን። ያም ማለት ሁሉንም ነገር በቀላሉ ካጠቃለልን, 6 እናገኛለን, ነገር ግን ከጡባዊው ላይ 3 ብቻ እናነባለን! CTE Scan ከየትኛውም ቦታ ምንም አያነብም, ነገር ግን በቀጥታ ከሂደቱ ማህደረ ትውስታ ጋር ይሰራል. ስለዚህ የሆነ ነገር እዚህ በግልጽ ስህተት ነው!

እንደውም ከሴክ ስካን የተጠየቁት እነዚያ 3 ገፆች ዳታ በመጀመሪያ 1 1ኛ CTE Scan ጠየቁ እና 2ተኛው እና 2 ተጨማሪ ተነበበላቸው።ይህም በድምሩ 3 ነው። ገጾች የተነበቡት ውሂብ እንጂ 6 አይደሉም።

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

እና ይህ ሥዕል የዕቅዱ አፈፃፀም ዛፍ አለመሆኑን እንድንገነዘብ አድርጎናል ፣ ግን አንድ ዓይነት አሲሊካዊ ግራፍ ብቻ ነው። እናም "አንድ ነገር ከየት እንደመጣ" እንድንረዳ እንደዚህ አይነት ንድፍ አግኝተናል. ማለትም፣ እዚህ CTE ከpg_class ፈጥረናል፣ እና ሁለት ጊዜ ጠየቅነው፣ እና ለሁለተኛ ጊዜ ስንጠይቅ ቅርንጫፉን ይዘን የወሰደብን ጊዜ ሁሉ ማለት ነው። የ 2 ኛውን መግቢያ ማንበብ ከጠረጴዛው 101 ኛ ብቻ ሳይሆን በጣም ውድ እንደሆነ ግልጽ ነው.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ለጥቂት ጊዜ ትንፋሽ ወስደናል. “አሁን፣ ኒዮ፣ ኩንግ ፉን ታውቃለህ! አሁን የእኛ ተሞክሮ በእርስዎ ማያ ገጽ ላይ ነው። አሁን ሊጠቀሙበት ይችላሉ." [ጽሑፍ]

የምዝግብ ማስታወሻ ማጠናከሪያ

የእኛ 1000 ገንቢዎች እፎይታ ተነፈሱ። እኛ ግን በመቶዎች የሚቆጠሩ “ውጊያ” አገልጋዮች ብቻ እንዳለን ተረድተናል፣ እና ይህ ሁሉ በገንቢዎች ላይ ያለው “ኮፒ-መለጠፍ” በጭራሽ ምቹ አይደለም። እኛ ራሳችን መሰብሰብ እንዳለብን ተገነዘብን.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

በአጠቃላይ, ስታቲስቲክስን ሊሰበስብ የሚችል መደበኛ ሞጁል አለ, ሆኖም ግን, በማዋቀሩ ውስጥ መንቃት ያስፈልገዋል - ይህ pg_stat_statements ሞዱል. እሱ ግን አልተመቸንም።

በመጀመሪያ፣ በተመሳሳዩ የውሂብ ጎታ ውስጥ በተለያዩ መርሃግብሮች ለተመሳሳይ መጠይቆች ይመድባል የተለያዩ QueryIDs. መጀመሪያ ካደረጉት ማለት ነው። SET search_path = '01'; SELECT * FROM user LIMIT 1;እና ከዚያ በኋላ SET search_path = '02'; እና ተመሳሳይ መጠይቅ ፣ ከዚያ በዚህ ሞጁል ስታቲስቲክስ ውስጥ የተለያዩ ግቤቶች ይኖራሉ ፣ እና እቅዶችን ከግምት ውስጥ ሳያስገባ አጠቃላይ ስታቲስቲክስን በተለይ በዚህ የጥያቄ መገለጫ አውድ ውስጥ መሰብሰብ አልችልም።

እንዳንጠቀምበት የከለከለን ሁለተኛው ነጥብ፡- ዕቅዶች እጥረት. ያም ማለት ምንም እቅድ የለም, ጥያቄው ራሱ ብቻ አለ. የቀዘቀዙትን እናያለን ግን ለምን እንደሆነ አይገባንም። እና እዚህ በፍጥነት ወደ ተለዋዋጭ የውሂብ ስብስብ ችግር እንመለሳለን.

እና የመጨረሻው ጊዜ - "እውነታዎች" እጥረት. ማለትም፣ የተወሰነ የጥያቄ ማስፈጸሚያ ምሳሌን ማነጋገር አይችሉም - የለም፣ የተዋሃደ ስታቲስቲክስ ብቻ አለ። ምንም እንኳን ከዚህ ጋር መስራት ቢቻልም, በጣም ከባድ ብቻ ነው.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ስለዚ፡ “ኮፒ-መለጠፍ”ን ለመዋጋት ወሰንን እና መጻፍ ጀመርን። ሰብሳቢዎች.

ሰብሳቢው በኤስኤስኤች በኩል ይገናኛል፣ ሰርተፍኬት በመጠቀም ከአገልጋዩ ጋር ደህንነቱ የተጠበቀ ግንኙነት ከመረጃ ቋቱ ጋር "ይጎትታል" እና tail -F በመዝገብ መዝገብ ላይ "ይጣበቃል". ስለዚህ በዚህ ክፍለ ጊዜ ውስጥ ሙሉውን የምዝግብ ማስታወሻ ፋይል ሙሉ "መስታወት" እናገኛለንበአገልጋዩ የመነጨ ነው። በተመሳሳይ ጊዜ በአገልጋዩ ላይ ያለው ሸክም በጣም አናሳ ነው, ምክንያቱም እዚያ ምንም ነገር ስለማንተነተን, ትራፊክን ብቻ እናንጸባርቃለን.

በይነገጽን በ Node.js ውስጥ መፃፍ ስለጀመርን ሰብሳቢውን በእሱ ላይ መፃፍ ቀጠልን። እና ይህ ቴክኖሎጂ እራሱን አፅድቋል, ምክንያቱም ጃቫ ስክሪፕትን ለመጠቀም ቀላል በሆነ ቅርጸት ከተሰራ የጽሑፍ ውሂብ ጋር ለመስራት በጣም ምቹ ነው, ይህም ሎግ ነው. እና የ Node.js መሠረተ ልማት እራሱ እንደ የጀርባ መድረክ ከአውታረ መረብ ግንኙነቶች ጋር ለመስራት ቀላል እና ምቹ ያደርገዋል, እና በእርግጥ ከአንዳንድ የውሂብ ዥረቶች ጋር.

በዚህ መሠረት ሁለት ግንኙነቶችን "እዘረጋን" የመጀመሪያው, ሎግ እራሱን "ለማዳመጥ" እና ወደ እራሳችን እንወስዳለን, እና ሁለተኛው, መሰረቱን በየጊዜው ለመጠየቅ. ግን በምዝግብ ማስታወሻው ውስጥ ኦይድ 123 ያለው ታብሌቱ ታግዶ ነበር ፣ ግን ይህ ለገንቢው ምንም ማለት አይደለም ፣ እና መሰረቱን “OID = 123 ምንድነው?” ብሎ መጠየቅ ጥሩ ነበር። እና ስለዚህ እኛ እስካሁን የማናውቀውን መሰረቱን በየጊዜው እንጠይቃለን።

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

አንድ ነገር ብቻ ትተውት የሄዱት ዝሆን የሚመስሉ የንብ ዝርያዎች አሉ! .. ይህንን ስርዓት ማዳበር የጀመርነው 10 አገልጋዮችን ለመከታተል ስንፈልግ ነው። በመረዳታችን ውስጥ በጣም ወሳኝ የሆነው፣ ለመጋፈጥ አስቸጋሪ የሆኑ አንዳንድ ችግሮች የተፈጠሩበት። ግን በመጀመሪያው ሩብ ዓመት ውስጥ ለክትትል አንድ መቶ ተቀብለናል - ምክንያቱም ስርዓቱ "ገብቷል", ሁሉም ሰው ፈልጎታል, ለሁሉም ሰው ምቹ ነው.

ይህ ሁሉ መጨመር አለበት, የውሂብ ፍሰቱ ትልቅ ነው, ንቁ ነው. እንደ እውነቱ ከሆነ የምንቆጣጠረውን፣ እንዴት መቋቋም እንዳለብን የምናውቀውን እንጠቀማለን። PostgreSQLንም እንደ የውሂብ ማከማቻ እንጠቀማለን። እና ከኦፕሬተሩ የበለጠ መረጃን ወደ እሱ "ለማፍሰስ" ምንም ፈጣን አይደለም። COPY ገና ነው.

ግን በቀላሉ መረጃን "ማፍሰስ" በትክክል የእኛ ቴክኖሎጂ አይደለም. ምክንያቱም በመቶ አገልጋዮች ላይ በሰከንድ 50k ጥያቄዎች ካሉዎት ይህ በቀን ከ100-150ጂቢ የምዝግብ ማስታወሻዎችን ያመነጫል። ስለዚህ, መሰረቱን በጥንቃቄ "መቁረጥ" ነበረብን.

በመጀመሪያ እኛ አደረግን በቀን መከፋፈል, ምክንያቱም በአጠቃላይ, ማንም በቀናት መካከል ያለውን ግንኙነት ማንም ፍላጎት የለውም. ዛሬ ማታ አዲስ የመተግበሪያውን ስሪት ከለቀሉ እና ቀድሞውንም አንዳንድ አዲስ ስታቲስቲክስ።

በሁለተኛ ደረጃ, ተምረናል (ተገደዱ) ጋር ለመጻፍ በጣም ፈጣን COPY. ብቻ ሳይሆን ማለት ነው። COPYምክንያቱም ፈጣን ነው INSERT, እና እንዲያውም ፈጣን.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ሦስተኛው ጊዜ - ማድረግ ነበረብኝ ቀስቅሴዎችን እንደቅደም ተከተላቸው እና ከውጭ ቁልፎች እምቢ ማለት. ማለትም፡ የማጣቀሻ ታማኝነት በፍጹም የለንም። ምክንያቱም በላዩ ላይ ጥንድ FK ያለው ጠረጴዛ ካለህ እና በመረጃ ቋቱ መዋቅር ውስጥ "በFK የተጠቀሰ የምዝግብ ማስታወሻ እዚህ አለ ለምሳሌ የመግቢያ ቡድን" ስትል ስታስገባ PostgreSQL እንዴት መውሰድ እና በታማኝነት መፈፀም እንዳለበት እንጂ ምንም ሳይኖረው ይቀራል SELECT 1 FROM master_fk1_table WHERE ... ለማስገባት እየሞከሩት ባለው ለዪ - ይህ ግቤት እዚያ እንዳለ ለመፈተሽ ብቻ ይህን የውጭ ቁልፍ በማስገባትዎ “እንደማይሰብሩት”።

በዒላማው ሠንጠረዥ እና ኢንዴክሶቹ ውስጥ ከአንድ መዝገብ ይልቅ እና እሱ ከሚጠቅሳቸው ሰንጠረዦች ሁሉ እናነባለን። እና በጭራሽ አያስፈልገንም - የእኛ ተግባር በተቻለ መጠን እና በተቻለ ፍጥነት በትንሹ ጭነት መመዝገብ ነው። ስለዚህ FK - ከእሱ ጋር!

የሚቀጥለው ነጥብ መደመር እና ሀሺንግ ነው። መጀመሪያ ላይ በመረጃ ቋቱ ውስጥ እንተገብራቸዋለን - ከሁሉም በኋላ ፣ ወዲያውኑ ፣ መዝገቡ ሲመጣ ፣ በአንድ ዓይነት ጡባዊ ውስጥ ለመስራት ምቹ ነው ። "አንድ ሲደመር" በትክክል ቀስቅሴ ውስጥ. ጥሩ ፣ ምቹ ፣ ግን መጥፎ በተመሳሳይ መንገድ - አንድ መዝገብ ያስገባሉ ፣ ግን ከሌላ ጠረጴዛ ላይ ሌላ ነገር ለማንበብ እና ለመፃፍ ይገደዳሉ። ከዚህም በላይ ለማንበብ እና ለመጻፍ ብቻ ሳይሆን - ሁልጊዜም ለማድረግ.

አሁን በአንድ የተወሰነ አስተናጋጅ ውስጥ ያለፉ የጥያቄዎች ብዛት የሚቆጥሩበት ጠረጴዛ እንዳለህ አስብ። +1, +1, +1, ..., +1. እና እርስዎ, በመርህ ደረጃ, አያስፈልጉትም - ሁሉም ይቻላል በአሰባሳቢው ላይ ትውስታ ውስጥ ድምር እና በአንድ ጉዞ ወደ መሰረቱ ይላኩ +10.

አዎን ፣ አንድ ዓይነት ብልሽት በሚከሰትበት ጊዜ አመክንዮአዊ ታማኝነትዎ “ሊፈርስ” ይችላል ፣ ግን ይህ ከእውነታው የራቀ ጉዳይ ነው - መደበኛ አገልጋይ ስላሎት ፣ በመቆጣጠሪያው ውስጥ ባትሪ አለው ፣ የግብይት ምዝግብ ማስታወሻ አለዎት ፣ በፋይል ስርዓቱ ላይ ግባ ... በአጠቃላይ ፣ ይህ ዋጋ የለውም። ለሚያወጡት ወጪ በመቀስቀስ/FKs የሚያገኙት የአፈጻጸም ኪሳራ ዋጋ የለውም።

ለሃሽንግ ተመሳሳይ ነው. አንድ የተወሰነ ጥያቄ ወደ እርስዎ ይበርራል, በመረጃ ቋቱ ውስጥ ከእሱ የተወሰነ መለያ ያሰላሉ, ወደ ዳታቤዝ ይጻፉ እና ከዚያ ለሁሉም ይንገሩት. በሚቀዳበት ጊዜ ሁሉም ነገር ጥሩ ነው ፣ እሱ ራሱ መቅዳት የሚፈልግ ሁለተኛ ሰው ወደ እርስዎ እስኪመጣ ድረስ - እና እገዳ አለዎት ፣ እና ይህ ቀድሞውኑ መጥፎ ነው። ስለዚህ, የአንዳንድ መታወቂያዎችን ማመንጨት ለደንበኛው (ከመሠረቱ አንጻር) ማስተላለፍ ከቻሉ, ይህን ማድረግ የተሻለ ነው.

ኤምዲ 5ን ከጽሑፍ መጠቀማችን ብቻ ፍጹም ነበር - ጥያቄ ፣ እቅድ ፣ አብነት ፣ ... በአሰባሳቢው በኩል እናሰላለን እና ዝግጁ የሆነ መታወቂያ ወደ ዳታቤዝ ውስጥ “አፍስሱ”። የMD5 ርዝመት እና ዕለታዊ ክፍፍል ሊፈጠሩ ስለሚችሉ ግጭቶች አንጨነቅ።

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ነገር ግን ይህን ሁሉ በፍጥነት ለመመዝገብ, የመቅዳት ሂደቱን በራሱ ማስተካከል ያስፈልገናል.

አብዛኛውን ጊዜ ውሂብ እንዴት ይፃፋል? አንድ ዓይነት ዳታ ስብስብ አለን ፣ ወደ ብዙ ሰንጠረዦች እናበስባለን ፣ እና ከዚያ COPY - መጀመሪያ ወደ መጀመሪያው ፣ ከዚያ ወደ ሁለተኛው ፣ ወደ ሦስተኛው ... የማይመች ነው ፣ ምክንያቱም አንድ የውሂብ ዥረት በቅደም ተከተል በሦስት ደረጃዎች የምንጽፈው ስለሚመስል ነው። . ደስ የማይል. በፍጥነት ሊከናወን ይችላል? ይችላል!

ይህንን ለማድረግ, እነዚህን ፍሰቶች እርስ በርስ በትይዩ መበስበስ ብቻ በቂ ነው. ስህተቶች, ጥያቄዎች, አብነቶች, በተለየ ክሮች ውስጥ የሚበሩ መቆለፊያዎች, ... - እና ሁሉንም በትይዩ እንጽፋለን. ለዚህ በቂ ነው። ለእያንዳንዱ የግለሰብ ዒላማ ሠንጠረዥ በቋሚነት ክፍት የሆነ COPY ቻናል ያቆዩ.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ሰብሳቢው ማለት ነው። ሁል ጊዜ ጅረት አለ።እኔ የሚያስፈልገኝን ውሂብ መጻፍ የምችልበት። ነገር ግን የውሂብ ጎታው ይህንን ውሂብ እንዲያይ እና አንድ ሰው በመቆለፊያ ውስጥ እንዳይሰቀል ፣ ይህ ውሂብ እንዲፃፍ ሲጠብቅ ፣ COPY በተወሰኑ ክፍተቶች መቋረጥ አለበት።. ለእኛ ፣ ወደ 100 ሚ.ሜ የሚሆን ጊዜ በጣም ውጤታማ ሆኖ ተገኝቷል - እንዘጋዋለን እና ወዲያውኑ ወደ ተመሳሳይ ጠረጴዛ እንከፍተዋለን። እና በአንዳንድ ከፍታዎች ላይ አንድ ዥረት በቂ ከሌለን እስከ የተወሰነ ገደብ ድረስ መሰብሰብን እናደርጋለን።

በተጨማሪም ፣ ለእንደዚህ ዓይነቱ ጭነት መገለጫ ፣ ማንኛውም ድምር ፣ መዝገቦች በፓኬቶች ውስጥ በሚሰበሰቡበት ጊዜ ፣ ​​መጥፎ መሆኑን አውቀናል ። ክላሲክ ክፋት ነው። INSERT ... VALUES እና ተጨማሪ 1000 መዝገቦች. ምክንያቱም በዚያን ጊዜ በመገናኛ ብዙኃን ላይ የመፃፍ ከፍተኛ ደረጃ አለዎት, እና ሌላ ሰው በዲስክ ላይ የሆነ ነገር ለመጻፍ የሚሞክር ሁሉ ይጠብቃል.

እንደዚህ ያሉ ያልተለመዱ ነገሮችን ለማስወገድ ፣ ምንም ነገር አያጠቃልሉ ፣ በጭራሽ አታስቀምጡ. እና በዲስክ ላይ ማቋረጡ ከተከሰተ (በአመስጋኝነት፣ በ Node.js ውስጥ ያለው የዥረት ኤፒአይ እንዲያውቁ ያስችልዎታል) - ይህን ግንኙነት ለሌላ ጊዜ ያስተላልፉ። ያኔ ነው አንድ ክስተት እንደገና ነጻ ሆኖ ወደ አንተ ሲመጣ - ከተጠራቀመው ወረፋ ይፃፉለት። እስከዚያው ድረስ ስራ በዝቶበታል - የሚቀጥለውን ነፃ ከገንዳው ይውሰዱት እና ይፃፉበት።

መረጃን ለመጻፍ ይህን አቀራረብ ከመተግበሩ በፊት, ወደ 4K የመጻፍ ኦፕስ ነበሩን, እና በዚህ መንገድ ጭነቱን በ 4 እጥፍ ቀንሷል. አሁን በአዲስ ክትትል የሚደረግባቸው የውሂብ ጎታዎች ምክንያት ሌላ 6 ጊዜ አድገዋል - እስከ 100 ሜባ / ሰ. እና አሁን ላለፉት 3 ወራት ምዝግብ ማስታወሻዎችን ከ10-15 ቴባ መጠን እናከማቻለን ፣ ማንኛውም ገንቢ በሦስት ወር ውስጥ ማንኛውንም ችግር ሊፈታ ይችላል ብለን ተስፋ እናደርጋለን።

ችግሮቹን እንረዳለን

ግን በቀላሉ እነዚህን ሁሉ መረጃዎች መሰብሰብ ጥሩ, ጠቃሚ, ተገቢ ነው, ግን በቂ አይደለም - ሊረዱት ይገባል. ምክንያቱም እነዚህ በየቀኑ በሚሊዮኖች የሚቆጠሩ የተለያዩ እቅዶች ናቸው.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ነገር ግን ሚሊዮኖች ከቁጥጥር ውጭ ናቸው, መጀመሪያ "ትንሽ" ማድረግ አለብዎት. እና በመጀመሪያ ደረጃ, ይህንን "ትንሹን" እንዴት እንደሚያደራጁ መወሰን ያስፈልግዎታል.

ለራሳችን ሦስት ቁልፍ ነጥቦችን ለይተናል።

  • ማን ይህን ጥያቄ ልኳል።
    ያም ማለት ከየትኛው መተግበሪያ ነው "የደረሰው"፡ የድር በይነገጽ፣ የኋላ ክፍል፣ የክፍያ ስርዓት ወይም ሌላ ነገር።
  • የት ተከሰተ
    በምን የተለየ አገልጋይ ላይ። ምክንያቱም በአንድ መተግበሪያ ስር ብዙ ሰርቨሮች ካሉዎት እና በድንገት አንድ “የደበዘዘ” (“ዲስክ ስለበሰበሰ” ፣ “ማስታወሻ ፈሰሰ” ፣ ሌላ ችግር ካለ) ከዚያ በተለይ አገልጋዩን ማነጋገር ያስፈልግዎታል።
  • እንዴት ችግሩ እራሱን በአንድ ወይም በሌላ መንገድ ተገለጠ

ጥያቄን "ማን" እንደላከልን ለመረዳት መደበኛ መሣሪያን እንጠቀማለን - የክፍለ-ጊዜ ተለዋዋጭ ማዘጋጀት፡ SET application_name = '{bl-host}:{bl-method}'; - ጥያቄው የመጣበትን የንግድ ሥራ አመክንዮ አስተናጋጅ ስም እና የጀመረውን ዘዴ ወይም መተግበሪያ ስም እንልካለን።

የጥያቄውን "ማስተር" ካለፍን በኋላ, በምዝግብ ማስታወሻው ውስጥ መታየት አለበት - ለዚህም ተለዋዋጭውን እናዋቅራለን. log_line_prefix = ' %m [%p:%v] [%d] %r %a'. ማን ያስባል ምናልባት በመመሪያው ውስጥ ይመልከቱምን ማለት ነው. በምዝግብ ማስታወሻው ውስጥ የምናየው ይሆናል፡-

  • время
  • የሂደት እና የግብይት መታወቂያዎች
  • የመሠረት ስም
  • ይህን ጥያቄ የላከው ሰው አይፒ
  • እና ዘዴ ስም

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

በተጨማሪም፣ በተለያዩ አገልጋዮች መካከል ያለውን የአንድ ጥያቄ ግንኙነት መመልከት በጣም አስደሳች እንዳልሆነ ተገነዘብን። አልፎ አልፎ፣ እዚህ እና እዚያ አንድ መተግበሪያ እኩል የሆነ “ቆሻሻ” ያለህበት ሁኔታ ታገኛለህ። ግን ተመሳሳይ ቢሆንም - ከእነዚህ አገልጋዮች ውስጥ አንዱን ይመልከቱ.

ስለዚህ, ይቁረጡ "አንድ አገልጋይ - አንድ ቀን" ለማንኛውም ትንታኔ በቂ ሆኖ አግኝተናል.

የመጀመሪያው የትንታኔ ክፍል ተመሳሳይ ነው "ናሙና" - የዕቅዱ አቀራረብ አህጽሮተ ቃል፣ ከሁሉም የቁጥር አመልካቾች ጸድቷል። ሁለተኛው መቁረጥ አተገባበር ወይም ዘዴ ነው, እና ሶስተኛው ችግር ያመጣብን ልዩ የፕላን መስቀለኛ መንገድ ነው.

ከተጨባጭ ምሳሌዎች ወደ አብነት ስንሸጋገር በአንድ ጊዜ ሁለት ጥቅሞችን አግኝተናል።

  • ለመተንተን የነገሮች ብዛት ብዙ መቀነስ
    ችግሩን መተንተን ያለብን በሺዎች በሚቆጠሩ ጥያቄዎች ወይም እቅዶች ሳይሆን በደርዘን በሚቆጠሩ ቅጦች ነው።
  • የጊዜ መሾመር
    ያም ማለት በአንድ የተወሰነ ክፍል ውስጥ ያሉትን "እውነታዎች" በማጠቃለል አንድ ሰው በቀን ውስጥ መልካቸውን ማሳየት ይችላል. እና እዚህ እርስዎ የሚከሰቱት አንዳንድ ስርዓተ-ጥለት ካሉዎት ፣ ለምሳሌ ፣ በሰዓት አንድ ጊዜ ፣ ​​ግን - በቀን አንድ ጊዜ ፣ ​​ምን እንደተፈጠረ ማሰብ እንዳለብዎ - በማን እና ለምን እንደተጠራ ፣ ምናልባት እዚህ መሆን እንዳለበት መረዳት ይችላሉ ። አይገባም። ይህ ሌላ አሃዛዊ ያልሆነ፣ ሙሉ በሙሉ የሚታይ የመተንተን መንገድ ነው።

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

የተቀሩት ዘዴዎች ከእቅዱ ውስጥ በምናወጣቸው አመልካቾች ላይ የተመሰረቱ ናቸው-እንዲህ ዓይነቱ ንድፍ ስንት ጊዜ እንደተከሰተ ፣ አጠቃላይ እና አማካይ ጊዜ ፣ ​​ከዲስክ ምን ያህል ውሂብ እንደተነበበ እና ከማህደረ ትውስታ ምን ያህል ...

ምክንያቱም, ለምሳሌ, ወደ አስተናጋጅ ትንታኔ ገጽ ይመጣሉ, ይመልከቱ - የሆነ ነገር በዲስክ ላይ በጣም ማንበብ ይጀምራል. በአገልጋዩ ላይ ያለው ዲስክ መቋቋም አይችልም - እና ከሱ ማን ያነብበዋል?

እና በማንኛውም አምድ መደርደር እና አሁን ምን እንደሚገጥሙ መወሰን ይችላሉ - በአቀነባባሪው ላይ ባለው ጭነት ወይም በዲስክ ላይ ፣ ወይም በአጠቃላይ የጥያቄዎች ብዛት ... ተደርድሯል ፣ “ከላይ” ያሉትን አይቶ አስተካክሏል ። - የመተግበሪያውን አዲስ ስሪት ተዘርግቷል።
[የቪዲዮ ትምህርት]

እና ወዲያውኑ ከተመሳሳይ አብነት ጋር የሚሄዱ የተለያዩ አፕሊኬሽኖችን ከመሳሰሉት ጥያቄ ማየት ይችላሉ። SELECT * FROM users WHERE login = 'Vasya'. Frontend፣ backend፣ processing...እና ለምን ፕሮሰሲንግ ተጠቃሚው ከእሱ ጋር ካልተገናኘ ማንበብ እንዳለበት ያስባሉ።

የተገላቢጦሽ መንገዱ ምን እንደሚሰራ ወዲያውኑ ለማየት ከመተግበሪያው ነው። ለምሳሌ, የፊት ግንባር ይህ, ይህ, ይህ እና ይሄ በሰዓት አንድ ጊዜ ነው (ጊዜው ብቻ ይረዳል). እና ጥያቄው ወዲያውኑ ይነሳል - በሰዓት አንድ ጊዜ አንድ ነገር ለማድረግ የፊት ግንባር ንግድ አይደለም ይመስላል ...

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ከተወሰነ ጊዜ በኋላ, የተጠቃለለ ነገር እንደሌለን ተገነዘብን ስታቲስቲክስ በእቅድ አንጓዎች. ከዕቅዶቹ የተገለልን በሠንጠረዡ መረጃ አንድ ነገር የሚሠሩትን አንጓዎች ብቻ ነው (በመረጃ ጠቋሚ ያንብቡ ወይም አይጻፉ)። በእውነቱ ፣ ከቀዳሚው ስዕል አንፃር ፣ አንድ ገጽታ ብቻ ተጨምሯል - ይህ መስቀለኛ መንገድ ስንት መዛግብት አመጣልን።፣ እና ምን ያህል እንደተጣለ (ረድፎች በማጣሪያ ተወግደዋል)።

በጠፍጣፋው ላይ ተስማሚ ኢንዴክስ የለዎትም፣ ጥያቄ ያቅርቡለት፣ መረጃ ጠቋሚውን አልፏል፣ በሴክ ስካን ውስጥ ይወድቃል ... ከአንድ በስተቀር ሁሉንም መዝገቦች አጣራ። እና ለምን በቀን 100M የተጣሩ መዝገቦችን ያስፈልገዎታል, መረጃ ጠቋሚውን ማንከባለል የተሻለ አይደለም?

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ሁሉንም እቅዶች በመስቀለኛ መንገድ ከመረመርን ፣ በእቅዶቹ ውስጥ በጣም አጠራጣሪ የሚመስሉ አንዳንድ የተለመዱ አወቃቀሮች እንዳሉ ተገነዘብን። እና ለገንቢው መንገር ጥሩ ነው-“ጓደኛ ፣ እዚህ መጀመሪያ በመረጃ ጠቋሚ ያንብቡ ፣ ከዚያ ደርድር እና ከዚያ ይቁረጡ” - እንደ አንድ ደንብ አንድ ግቤት አለ።

ጥያቄን የፃፉ ሁሉ ምናልባት እንዲህ ዓይነት ንድፍ አጋጥመውት ይሆናል፡- “ለቫስያ ​​የመጨረሻውን ትእዛዝ ስጠኝ፣ ቀኑ። በትክክል እንዲህ ባለው "መሰቅሰቂያ" ላይ .

ግን ይህ “መሰቅሰቂያ” እንደሆነ እናውቃለን - ታዲያ ለምን ምን ማድረግ እንዳለበት ወዲያውኑ ለገንቢው አይነግሩም። በዚህ መሠረት አሁን እቅዱን ሲከፍት የእኛ ገንቢ ወዲያውኑ ፍንጭ ያለው ቆንጆ ምስል አይቷል ፣ ወዲያውኑ “እዚህ እና እዚያ ችግሮች አሉብዎት ፣ ግን በዚህ እና በዚህ መንገድ ተፈትተዋል” ተባለ።

በዚህ ምክንያት መጀመሪያ ላይ ችግሮችን ለመፍታት የሚያስፈልገው ልምድ እና አሁን በከፍተኛ ደረጃ ቀንሷል። እዚህ እንደዚህ አይነት መሳሪያ አለን.

የPostgreSQL መጠይቆችን በብዛት ማመቻቸት። ኪሪል ቦሮቪኮቭ (ቴንሱር)

ምንጭ: hab.com

አስተያየት ያክሉ