Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ слоТных запросов MySQL

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

MySQL β€” вСсьма ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ нСсравнСнноС прСимущСство Π² скорости ΠΏΠ΅Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… опСрациях/запросах. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΉ (Ссли Π½Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅Π΄ΠΎΡ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΉ) ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎ Π½Π° слоТных запросах ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‡ΠΈΡΡ‚ΡƒΡŽ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΊΡ€ΡƒΠ³ рассматриваСмых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Β«ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈΒ» ΠΈ большими Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ Π΄ΠΎ 10m записСй ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π΄ΠΎ 20Gb, с большим количСством измСняСмых запросов ΠΊ Π½ΠΈΠΌ. Если Π² вашСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² записСй, каТдая Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎ 100 Π±Π°ΠΉΡ‚, ΠΈ ΠΏΡΡ‚ΡŒ нСслоТных Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… запросов ΠΊ Π½Π΅ΠΉ β€” это ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ для Вас. NB: РассматриваСтся Π΄Π²ΠΈΠΆΠΎΠΊ MySQL innodb/percona β€” Π² дальнСйшСм просто MySQL.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ запросов Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ слоТными. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ индСкс для использования Π½ΡƒΠΆΠ½Ρ‹ΠΌ запросом ΠΈ/ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запрос Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ использовал ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ индСксы. ΠœΡ‹ рассмотрим Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° для Π²Ρ‹Π±ΠΎΡ€Π° индСкса ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… запросов (select_type=simple), Π±Π΅Π· Π΄ΠΆΠΎΠΉΠ½ΠΎΠ², подзапросов ΠΈ объСдинСний.

ΠžΡ‚Π±Ρ€ΠΎΡΠΈΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ случаи для ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ type=all (ΠΏΠΎΠ»Π½Ρ‹ΠΉ просмотр) Π²Π½Π΅ зависимости ΠΎΡ‚ наличия индСксов β€” ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, классификатор с 40-ΠΊΠ° записями. MySQL ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… индСксов (index merge), Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ часто, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π΅Π· order by. ЕдинствСнный Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ способ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ index merge β€” случаи Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ столбцам с OR.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ отступлСниС: подразумСваСтся Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌ с explain. Часто сам запрос Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ модифицируСтся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ, поэтому для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ использовался ΠΈΠ»ΠΈ Π½Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ индСкс, слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ запрос.

ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс β€” ΠΎΡ‚ толстых Ρ‚Π°Π±Π»ΠΈΡ† ΠΊ индСксам

Π˜Ρ‚Π°ΠΊ Π·Π°Π΄Π°Ρ‡Π°: ΠΏΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ довольно простой запрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся довольно часто, Π½ΠΎ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ частого Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Рассмотрим ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ привСдСния нашСго запроса ΠΊ using index, ΠΊΠ°ΠΊ ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ быстрому Π²Ρ‹Π±ΠΎΡ€Ρƒ.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ запросов Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π±Π°Π·Π°Ρ…. Если PostgreSQL/Oracle ΠΊΠ΅ΡˆΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠ»Π°Π½Ρ‹ запросов (ΠΊΠ°ΠΊ Π±Ρ‹ prepare for some timeout), Ρ‚ΠΎ MySQL просто ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ БВРОКУ запроса (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) ΠΈ сохраняСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запроса. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π· β€” Ρ‚ΠΎ, Ссли DDD Π½Π΅ содСрТит ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° AAA Π½Π΅ измСнилась (Π² смыслС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ изоляции), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ взят прямо ΠΈΠ· кСша. Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ спорноС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Spark SQL. НСмного ΠΎΠ± ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ запросов

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚. Π’ качСствС ввСдСния, хочСтся Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ я дошСл Π΄ΠΎ ΠΆΠΈΠ·Π½ΠΈ Ρ‚Π°ΠΊΠΎΠΉ.

Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ с Big Data ΠΈ Spark, Π² частности, ΠΌΠ½Π΅ довСлось ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ часто ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ SQL запросы, сначала для MSSQL, ΠΏΠΎΡ‚ΠΎΠΌ для Oracle, ΠΈ Π²ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я столкнулся со SparkSQL.

И Ссли для Π‘Π£Π‘Π” ΡƒΠΆΠ΅ сущСствуСт мноТСство Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΊΠ½ΠΈΠ³, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡŽ ΠΈ Β«Ρ€ΡƒΡ‡ΠΊΠΈΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ для получСния ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° запроса, Ρ‚ΠΎ для Spark Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΊΠ½ΠΈΠ³ я Π½Π΅ встрСчал. На Π³Π»Π°Π·Π° попадались большС ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ большС относящиСся ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· RDD/Dataset API, Π° Π½Π΅ чистому SQL. Для мСня ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· эталонных ΠΊΠ½ΠΈΠ³ Π½Π° Ρ‚Π΅ΠΌΡƒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ SQL являСтся ΠΊΠ½ΠΈΠ³Π° Π”ΠΆ. Π›ΡŒΡŽΠΈΡ Β«Oracle. ΠžΡΠ½ΠΎΠ²Ρ‹ стоимостной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈΒ». Π§Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΏΠΎ Π³Π»ΡƒΠ±ΠΈΠ½Π΅ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ я ΠΈ искал. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ исслСдования стал ΠΈΠΌΠ΅Π½Π½ΠΎ SparkSQL, Π° Π½Π΅ API, Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π² основС? Π’ΡƒΡ‚ интСрСс Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ особСнностями ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ² наша компания Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ слой ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ Ρ‡Π°ΡΡ‚ΡŒ Π²ΠΈΡ‚Ρ€ΠΈΠ½ находится Π² кластСрС Hadoop, Π° ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹Π΅ Π²ΠΈΡ‚Ρ€ΠΈΠ½Ρ‹ β€” Π² Oracle. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΉ слой прСобразования Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° Spark. Для ускорСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ возмоТности ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ETL, Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… с тонкостями Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Big Data, Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… с SQL ΠΈ ETL срСдствами, Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ инструмСнт, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ETL срСдства, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Informatica, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ETL процСссы с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π° для Spark. Π’ силу слоТности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈ большого количСства ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ SparkSQL запросы.

Π’ΠΎΡ‚ с этого мСста ΠΈ начинаСтся история, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° большоС количСство вопросов Π²ΠΈΠ΄Π° «А ΠΏΠΎΡ‡Π΅ΠΌΡƒ запрос Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚/Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ/Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Oracle?Β». НаиболСС интСрСсной Ρ‡Π°ΡΡ‚ΡŒΡŽ для мСня оказался ΠΈΠΌΠ΅Π½Π½ΠΎ этот: Β«ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?Β». Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π‘Π£Π‘Π”, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я Ρ€Π°Π±ΠΎΡ‚Π°Π» Π΄ΠΎ этого, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π»Π΅Π·Ρ‚ΡŒ Π² исходный ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ вопросы.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΈ допущСния

Для запуска ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° исходного ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Spark 2.3.0.
ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Π·Π½Π°ΠΊΠΎΠΌ с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ Spark, ΠΈ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ дСйствия ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° запросов для ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π‘Π£Π‘Π”. Как ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Ρ„Ρ€Π°Π·Π° Β«ΠΏΠ»Π°Π½ запроса» Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ удивлСния.

Π’Π°ΠΊΠΆΠ΅ данная ΡΡ‚Π°Ρ‚ΡŒΡ пытаСтся Π½Π΅ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Spark Π½Π° русский язык, поэтому для Π²Π΅Ρ‰Π΅ΠΉ, вСсьма интСрСсных с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² исходном ΠΊΠΎΠ΄Π΅, Ρ‚ΡƒΡ‚ Π±ΡƒΠ΄ΡƒΡ‚ просто ΠΊΡ€Π°Ρ‚ΠΊΠΎ упомянуты со ссылками Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ

НачнСм с нСбольшого запроса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ основныС стадии, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ синтаксичСского Ρ€Π°Π·Π±ΠΎΡ€Π° Π΄ΠΎ выполнСния.

Основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Ρ€Π°Π·Π±ΠΎΡ€ SQL, ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠ»Π°Π½Π° выполнСния запроса β€” Spark Catalyst.

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈ описании ΠΏΠ»Π°Π½Π° запроса (df.explain(true)) позволяСт ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ всС стадии, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ запрос:

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ стадии ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ выполнСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, WholeStageCodegen) выходят Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π½ΠΎ вСсьма ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ (Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ описанныС Π²Ρ‹ΡˆΠ΅ стадии) описаны Π² Mastering Spark Sql.

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π½Π° выполнСния запроса ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ происходит Β«ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈΒ» ΠΈ «снизу Π²Π²Π΅Ρ€Ρ…Β», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ части, ΠΈ постСпСнно ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ ΠΊ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ, располоТСнной Π½Π° самом Π²Π΅Ρ€Ρ…Ρƒ.

Π’ΠΈΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² запросов

МоТно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² запросов:

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π·Π°Ρ‚ΠΎΡ‡Π΅Π½Ρ‹ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π°Π±ΠΎΡ€Π° фиксированных ΠΏΡ€Π°Π²ΠΈΠ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ условий Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ· where Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… этапах, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, прСдвычислСниС констант ΠΈ Ρ‚.Π΄.

CBO ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ для ΠΎΡ†Π΅Π½ΠΊΠΈ качСства ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ зависит ΠΎΡ‚ объСма ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, количСства строк, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, стоимости выполнСния Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ с Π΄ΠΈΠ·Π°ΠΉΠ½-спСцификациСй Π½Π° CBO для Apache Spark ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ссылкам: спСцификация ΠΈ основная JIRA Π·Π°Π΄Π°Ρ‡Π° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠžΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ для изучСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Optimizer.scala.

Π’ΠΎΡ‚ нСбольшая Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΠ· Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ списка доступных ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ:

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ список Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, основанныС Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ…, Ρ‚Π°ΠΊ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, основанныС Π½Π° ΠΎΡ†Π΅Π½ΠΊΠΈ стоимости запроса, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ сказано Π½ΠΈΠΆΠ΅.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ CBO являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ статистикС Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² запросС β€” количСство записСй, Ρ€Π°Π·ΠΌΠ΅Ρ€ записи, гистограммы распрСдСлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² столбцах Ρ‚Π°Π±Π»ΠΈΡ†.

Для сбора статистики ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°Π±ΠΎΡ€ SQL ΠΊΠΎΠΌΠ°Π½Π΄ ANALYZE TABLE… COMPUTE STATISTICS, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π°Π±ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ† для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, API прСдоставляСтся Ρ‡Π΅Ρ€Π΅Π· ExternalCatalog, Ρ‚ΠΎΡ‡Π½Π΅Π΅ Ρ‡Π΅Ρ€Π΅Π· HiveExternalCatalog.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ CBO ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, Ρ‚ΠΎ основной ΡƒΠΏΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ сдСлан Π½Π° исслСдовании доступных оптимизация ΠΈ нюансов RBO.

Π’ΠΈΠ΄Ρ‹ ΠΈ Π²Ρ‹Π±ΠΎΡ€ стратСгии join

На стадии формирования физичСского ΠΏΠ»Π°Π½Π° выполнСния запроса производится Π²Ρ‹Π±ΠΎΡ€ стратСгии join. На настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Spark доступны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ (ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ с ΠΊΠΎΠ΄Π° Π² SparkStrategies.scala).

Broadcast hash join

ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² случаС Ссли ΠΎΠ΄Π½Π° ΠΈΠ· сторон join достаточно ΠΌΠ°Π»Π° (ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ достаточности задаСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ spark.sql.autoBroadcastJoinThreshold Π² SQLConf). Π’ этом случаС данная сторона Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ копируСтся Π½Π° всС executor’Ρ‹, Π³Π΄Π΅ ΠΈ происходит hash join с основной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² случаС outer join ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ outer сторону, поэтому ΠΏΠΎ возмоТности Π² качСствС Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² случаС outer join Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с наибольшим объСмом Π΄Π°Π½Π½Ρ‹Ρ….

Sort merge join

Π‘ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ настройкой spark.sql.join.preferSortMergeJoin Π΄Π°Π½Π½Ρ‹ΠΉ способ примСняСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли ΠΊΠ»ΡŽΡ‡ΠΈ для join ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
Из особСнностСй ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ способа, оптимизация ΠΏΠΎ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для inner join.

Shuffle hash join

Π’ случаС Ссли ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ сортировкС, Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° настройка Π²Ρ‹Π±ΠΎΡ€Π° sort merge join ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Catalyst пытаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ shuffle hash join. Помимо ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° настройки, провСряСтся Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Spark Ρ…Π²Π°Ρ‚ΠΈΡ‚ памяти, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ hash map для ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ (ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ задаСтся настройкой spark.sql.shuffle.partitions)

BroadcastNestedLoopJoin ΠΈ CartesianProduct

Π’ случаС, ΠΊΠΎΠ³Π΄Π° отсутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прямого сравнСния ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, условиС ΠΏΠΎ like) ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ»ΡŽΡ‡ΠΈ для соСдинСния Ρ‚Π°Π±Π»ΠΈΡ†, Π² зависимости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Π°Π±Π»ΠΈΡ†, выбираСтся Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π»ΠΈΠ±ΠΎ CartesianProduct.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ указания Ρ‚Π°Π±Π»ΠΈΡ† Π² join’Π°Ρ…

Π’ любом случаС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ join Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ shuffle Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ порядок указания Ρ‚Π°Π±Π»ΠΈΡ†, особСнно Π² случаС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ подряд Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… join Π²Π°ΠΆΠ΅Π½ (Ссли Π±Ρ‹Ρ‚ΡŒ Π·Π°Π½ΡƒΠ΄ΠΎΠΉ, Ρ‚ΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ CBO, ΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° настройка JOIN_REORDER_ENABLED).

По возмоТности порядок соСдинСния Ρ‚Π°Π±Π»ΠΈΡ† Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство shuffle ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†, для Ρ‡Π΅Π³ΠΎ соСдинСния ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Ρƒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ΄Ρ‚ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ стоит Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… для join, для возмоТности Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Broadcast Hash Join.

Π’Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ условий Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ соСдиняСм Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, ΠΏΠΎ полю actual_date ΠΈ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ явный Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ balance.

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° запроса, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ Π΄Π°Ρ‚Π΅ примСняСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ ΠΊ customer, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅ чтСния Π΄Π°Π½Π½Ρ‹Ρ… с диска опрСдСляСтся, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½Π° партиция.

Но стоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² запросС inner join Π½Π° left outer, ΠΊΠ°ΠΊ Ρ‚ΡƒΡ‚ ΠΆΠ΅ отваливаСтся push predicate для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ customer, ΠΈ происходит ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС, Ρ‡Ρ‚ΠΎ являСтся Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ эффСктом.

ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ²

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Π±ΠΎΡ€Π° ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π² схСмС Ρ‚ΠΈΠΏ поля party_type β€” string.

И сравним Π΄Π²Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΏΠ»Π°Π½Π°, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ β€” ΠΊΠΎΠ³Π΄Π° обращаСмся ΠΏΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ (Π±ΡƒΠ΄Π΅Ρ‚ нСявноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ int to string), Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΊΠΎΠ³Π΄Π° ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ схСмС.

Аналогичная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ ΠΈ для случая сравнСния Π΄Π°Ρ‚Ρ‹ со строкой, Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π½Π° сравнСниС строк. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

НаправлСниС Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… исслСдований

Много Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Β«Ρ€ΡƒΡ‡ΠΊΠ°Ρ…Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ½ΠΊΠΎΠΉ настройки Catalyst, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ возмоТностях (настоящих ΠΈ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ…) ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΡŒ ΠΈΠ· SQLConf.scala.

Π’ частности, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ стоимостной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ всС Π΅Ρ‰Π΅ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½.

Π Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ зависящиС ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, связанныС с пСрСупорядочиваниСм join’ΠΎΠ².

ΠšΡ€Π°Ρ‚ΠΊΠΈΠ΅ ΠΈΡ‚ΠΎΠ³ΠΈ

Удалось Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ ΠΆΠ΄ΡƒΡ‚ экспСримСнты со стоимостной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС простора для прСобразования запросов. Π’Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ интСрСсный вопрос β€” сопоставлСниС Π½Π°Π±ΠΎΡ€Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈΠ· Parquet ΠΈ Orc Ρ„Π°ΠΉΠ»ΠΎΠ², судя ΠΏΠΎ jira ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄Π΅Π»ΠΎ ΠΈΠ΄Π΅Ρ‚ ΠΊ ΠΏΠ°Ρ€ΠΈΡ‚Π΅Ρ‚Ρƒ, Π½ΠΎ Ρ‚Π°ΠΊ Π»ΠΈ это Π½Π° самом Π΄Π΅Π»Π΅?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ SQL запросов ΠΈΠ»ΠΈ розыск опасных прСступников

КСйс компании Appbooster

Полагаю, практичСски ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ruby on Rails ΠΈ Postgres Π² качСствС основного вооруТСния Π½Π° бэкСндС находится Π² ΠΏΠ΅Ρ€ΠΌΠ°Π½Π΅Π½Ρ‚Π½ΠΎΠΉ Π±ΠΎΡ€ΡŒΠ±Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒΡŽ/ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ΄Π° ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅. Π― расскаТу ΠΎ своСм ΠΎΠΏΡ‹Ρ‚Π΅ балансирования ΠΌΠ΅ΠΆΠ΄Ρƒ этими трСмя ΠΊΠΈΡ‚Π°ΠΌΠΈ Π² кСйсС, Π³Π΄Π΅ Π½Π° Π²Ρ…ΠΎΠ΄Π΅ страдали Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎ мСня Π±Π΅Π·ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколько Ρ‚Π°Π»Π°Π½Ρ‚Π»ΠΈΠ²Ρ‹Ρ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ².

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ вся история Π·Π°ΠΉΠΌΡ‘Ρ‚ нСсколько частСй. Π­Ρ‚ΠΎ пСрвая, Π³Π΄Π΅ я расскаТу ΠΎ Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ PMDSC для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ SQL-запросов, подСлюсь ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ инструмСнтами измСрСния эффСктивности запросов Π² postgres ΠΈ напомню ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ старой ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ΅, которая Π΄ΠΎ сих ΠΏΠΎΡ€ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°.

БСйчас, спустя ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя, β€œΠ·Π°Π΄Π½ΠΈΠΌ умом” я понимаю, Ρ‡Ρ‚ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π² этот кСйс ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π» Ρ‡Ρ‚ΠΎ Ρƒ мСня всё получится. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ этот пост Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ скорСС для смСлых ΠΈ Π½Π΅ самых ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‡Π΅ΠΌ для супСр-ΡΠ΅Π½ΡŒΠΎΡ€ΠΎΠ² Π²ΠΈΠ΄Π°Π²ΡˆΠΈΡ… Ρ€Π΅Π»ΡŒΡΡ‹ с Π³ΠΎΠ»Ρ‹ΠΌ SQL.

Π’Π²ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

ΠœΡ‹ Π² Appbooster занимаСмся ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρ‹ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ нСсколько своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. БэкСнд Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ· Π½ΠΈΡ… это Rails API ΠΈ Postgresql.

Π“Π΅Ρ€ΠΎΠΉ этой ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ разрабатываСтся с ΠΊΠΎΠ½Ρ†Π° 2013 Π³ΠΎΠ΄Π° – Ρ‚ΠΎΠ³Π΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ΡˆΠ΅Π» rails 4.1.0.beta1. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ вырос Π² ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ крутится Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСрвСрах Π² Amazon EC2 c ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ инстансом Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² Amazon RDS (db.t3.xlarge с 4 vCPU ΠΈ 16 GB RAM). ΠŸΠΈΠΊΠΎΠ²Ρ‹Π΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ доходят Π΄ΠΎ 25k RPM, срСдняя Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π½Ρ‘ΠΌ 8-10k RPM.

Π‘ инстанса Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΡ‡Π½Π΅Π΅ с Π΅Ρ‘ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠ³ΠΎ баланса ΠΈ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ эта история.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ инстанс Postgres Ρ‚ΠΈΠΏΠ° β€œt” Π² Амазон RDS: Ссли ваша Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со срСдним ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΠΈΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ значСния, Ρ‚ΠΎ Ρƒ вас Π½Π° счСту Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΡ€Π΅Π΄ΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ инстанс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ процСссора Π² часы высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ – это позволяСт Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π·Π° сСрвСрныС мощности ΠΈ ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Ρ‚ΠΎΠΌ Π·Π° Ρ‡Ρ‚ΠΎ ΠΈ сколько платят, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ AWS ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ нашСго CTO.

Π’ ΠΎΠ΄ΠΈΠ½ прСкрасный дСнь, я написал Π² Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΌ саммари ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ устал Ρ‚ΡƒΡˆΠΈΡ‚ΡŒ пСриодичСски Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€œΠΏΠΎΠΆΠ°Ρ€Ρ‹β€. Если Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ, Ρ‚ΠΎ бизнСс Π·Π°Π΄Π°Ρ‡Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Π»ΡΡ‚ΡŒ врСмя Π²Ρ‹Π³ΠΎΡ€Π΅Π²ΡˆΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. Π’ Ρ‚ΠΎΡ‚ ΠΆΠ΅ дСнь я подошСл ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡƒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², объяснил расклад ΠΈ попросил врСмя Π½Π° расслСдованиС ΠΏΡ€ΠΈΡ‡ΠΈΠ½ пСриодичСских ΠΏΠΎΠΆΠ°Ρ€ΠΎΠ² ΠΈ Ρ€Π΅ΠΌΠΎΠ½Ρ‚. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² Π΄ΠΎΠ±Ρ€ΠΎ, я Π½Π°Ρ‡Π°Π» ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… систСм ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Newrelic для отслСТивания ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° Π·Π° сутки. ΠšΠ°Ρ€Ρ‚ΠΈΠ½Π° выглядСла Ρ‚Π°ΠΊ:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Π–Π΅Π»Ρ‚Ρ‹ΠΌ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Postgres. Как Π²ΠΈΠ΄Π½ΠΎ, ΠΈΠ½ΠΎΠ³Π΄Π° врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° Π΄ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΎ Π΄ΠΎ 1000 ms ΠΈ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»ΡΠ»Π° Π½Π°Π΄ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ. Π—Π½Π°Ρ‡ΠΈΡ‚ Π½Π°Π΄ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ происходит с SQL запросами.

PMDSC – простая ΠΈ понятная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° для любой скучной Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ SQL запросов

Play it!
Measure it!
Draw it!
Suppose it!
Check it!

Play it!

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ, самая ваТная Ρ‡Π°ΡΡ‚ΡŒ всСй ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. Когда ΠΊΡ‚ΠΎ-Ρ‚ΠΎ произносит Ρ„Ρ€Π°Π·Ρƒ Β«ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ SQL запросов» – это скорСС Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ приступ Π·Π΅Π²ΠΎΡ‚Ρ‹ ΠΈ скуку Ρƒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° людСй. Когда Ρ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π½ΠΎΡΠΈΡˆΡŒ Β«Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ расслСдованиС ΠΈ розыск опасных Π·Π»ΠΎΠ΄Π΅Π΅Π²Β» – это сильнСС Π²ΠΎΠ²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈ настраиваСт тСбя самого Π½Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π»Π°Π΄. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΈΠ³Ρ€Ρƒ. МнС ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ²Π°. Π― прСдставлял сСбС Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Π»ΠΈΠ±ΠΎ опасныС прСступники, Π»ΠΈΠ±ΠΎ Ρ€Π΅Π΄ΠΊΠΈΠ΅ Π±ΠΎΠ»Π΅Π·Π½ΠΈ. А сСбя прСдставлял Π² Ρ€ΠΎΠ»ΠΈ Π¨Π΅Ρ€Π»ΠΎΠΊΠ° Π₯олмса, Π›Π΅ΠΉΡ‚Π΅Π½Π°Π½Ρ‚Π° Коломбо ΠΈΠ»ΠΈ Π”ΠΎΠΊΡ‚ΠΎΡ€Π° Π₯ауса. Π’Ρ‹Π±ΠΈΡ€Π°ΠΉ гСроя Π½Π° свой вкус ΠΈ Π²ΠΏΠ΅Ρ€Π΅Π΄!

Measure It!

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Для Π°Π½Π°Π»ΠΈΠ·Π° статистики запросов, я установил PgHero. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ pg_stat_statements для Postgres. Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² /queries ΠΈ смотрим Π½Π° статистику всСх запросов Π·Π° послСдниС сутки. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° запросов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ Total Time – доля ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ запрос – Ρ†Π΅Π½Π½Ρ‹ΠΉ источник Π² поискС ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹Ρ…. Average Time – сколько Π² срСднСм запрос выполняСтся. Calls – сколько запросов Π±Ρ‹Π»ΠΎ Π·Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ врСмя. PgHero считаСт ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ Π±ΠΎΠ»Π΅Π΅ 100 Ρ€Π°Π· Π·Π° сутки ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π² срСднСм Π±ΠΎΠ»Π΅Π΅ 20 миллисСкунд. Бписок ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ страницС, сразу послС списка Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ индСксов.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Π‘Π΅Ρ€Ρ‘ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π² спискС ΠΈ смотрим Π΄Π΅Ρ‚Π°Π»ΠΈ запроса, Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ explain analyze. Eсли planning time сильно мСньшС execution time, Π·Π½Π°Ρ‡ΠΈΡ‚ с этим запросом Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ ΠΈ ΠΌΡ‹ ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° этом ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΠΎΠΌ.

Π’ PgHero Π΅ΡΡ‚ΡŒ свой способ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΌΠ½Π΅ большС ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ explain.depesz.com копируя Ρ‚ΡƒΠ΄Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· explain analyze.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Один ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹Ρ… запросов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Index Scan. На Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ этот индСкс Π½Π΅ эффСктивСн ΠΈ являСтся слабым мСстом – Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ красным. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! ΠœΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ слСды ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈ нашли Π²Π°ΠΆΠ½ΡƒΡŽ ΡƒΠ»ΠΈΠΊΡƒ! ΠŸΡ€Π°Π²ΠΎΡΡƒΠ΄ΠΈΠ΅ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ!

Draw it!

НарисуСм мноТСство Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ части запроса. Π‘ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ индСкс.

НСмного контСкста. ΠœΡ‹ тСстировали ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов удСрТания Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ – Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Π»ΠΎΡ‚Π΅Ρ€Π΅ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π²Π°Π»ΡŽΡ‚Ρ‹. Π”Π΅Π»Π°Π΅ΡˆΡŒ ставку, Π·Π°Π³Π°Π΄Ρ‹Π²Π°Π΅ΡˆΡŒ число ΠΎΡ‚ 0 Π΄ΠΎ 100 ΠΈ Π·Π°Π±ΠΈΡ€Π°Π΅ΡˆΡŒ вСсь Π±Π°Π½ΠΊ, Ссли Ρ‚Π²ΠΎΠ΅ число оказалось Π±Π»ΠΈΠΆΠ΅ всСх ΠΊ Ρ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл. ΠœΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ это β€œΠΡ€Π΅Π½Π°β€, Π° Ρ€ΠΎΠ·Ρ‹Π³Ρ€Ρ‹ΡˆΠΈ Π½Π°Π·Π²Π°Π»ΠΈ β€œΠ‘ΠΈΡ‚Π²Π°ΠΌΠΈβ€.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Π’ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ расслСдования ΠΎΠΊΠΎΠ»ΠΎ пятисот тысяч записСй ΠΎ Π±ΠΈΡ‚Π²Π°Ρ…. Π’ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ части запроса ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ Π±ΠΈΡ‚Π²Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ставка Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ баланс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ статус Π±ΠΈΡ‚Π²Ρ‹ – ΠΆΠ΄Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ². Π’ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ пСрСсСчСниС мноТСств (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΌ) совсСм малСнькоС количСство записСй.

ИндСкс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΠΎΠΉ части запроса ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ всС созданныС Π±ΠΈΡ‚Π²Ρ‹ ΠΏΠΎ полю created_at. Запрос ΠΏΡ€ΠΎΠ±Π΅Π³Π°Π΅Ρ‚ ΠΏΠΎ 505330 записям ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ 40, Π° 505290 отсСиваСт. Выглядит ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°ΡΡ‚ΠΎΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Suppose it!

Π’Ρ‹Π΄Π²ΠΈΠ³Π°Π΅ΠΌ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρƒ. Π§Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°ΠΉΡ‚ΠΈ сорок записСй ΠΈΠ· пятисот тысяч? ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ индСкс ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅ ставка, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π±ΠΈΡ‚Π² со статусом β€œΠΆΠ΄Ρƒ игроков” – ΠΏΠ°Ρ€ΡˆΠΈΠ°Π» индСкс.

ΠŸΠ°Ρ€ΡˆΠΈΠ°Π» индСкс – сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ… записСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ подходят ΠΏΠΎΠ΄ условиС: ΠΏΠΎΠ»Π΅ статус Ρ€Π°Π²Π½ΠΎ β€œΠΆΠ΄Ρƒ_игроков” ΠΈ индСксируСт ΠΏΠΎΠ»Π΅ ставка – Ρ€ΠΎΠ²Π½ΠΎ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π² условии запроса. ΠžΡ‡Π΅Π½ΡŒ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ этот индСкс: ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго 40 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ ΠΈ Π½Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ Π±ΠΈΡ‚Π²Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ сыграны ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π½Π°ΠΌ для получСния Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ. Для сравнСния – индСкс index_arena_battles_on_created_at, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовался ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹ΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 40 Мб, Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° с Π±ΠΈΡ‚Π²Π°ΠΌΠΈ ΠΎΠΊΠΎΠ»ΠΎ 70 Мб. Π­Ρ‚ΠΎΡ‚ индСкс ΠΌΠΎΠΆΠ½ΠΎ смСло ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, Ссли Π΅Π³ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ запросы.

Check it!

Π’Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ с Π½ΠΎΠ²Ρ‹ΠΌ индСксом Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ ΠΈ наблюдаСм Π·Π° Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ измСнился ΠΎΡ‚ΠΊΠ»ΠΈΠΊ эндпоинта с Π±ΠΈΡ‚Π²Π°ΠΌΠΈ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

На Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π²ΠΈΠ΄Π½ΠΎ Π²ΠΎ сколько ΠΌΡ‹ Π²Ρ‹ΠΊΠ°Ρ‚ΠΈΠ»ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ. Π’Π΅Ρ‡Π΅Ρ€ΠΎΠΌ 6 дСкабря врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 10 Ρ€Π°Π· с

50ms. ΠŸΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹ΠΉ Π² судС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» статус Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сидит Π² Ρ‚ΡŽΡ€ΡŒΠΌΠ΅. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ!

Prison Break

Бпустя нСсколько Π΄Π½Π΅ΠΉ ΠΌΡ‹ поняли Ρ‡Ρ‚ΠΎ Ρ€Π°Π½ΠΎ Ρ€Π°Π΄ΠΎΠ²Π°Π»ΠΈΡΡŒ. ΠŸΠΎΡ…ΠΎΠΆΠ΅, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ нашСл сообщников, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΈ осущСствил ΠΏΠ»Π°Π½ ΠΏΠΎΠ±Π΅Π³Π°.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Π£Ρ‚Ρ€ΠΎΠΌ 11 дСкабря ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ запросов postgres Ρ€Π΅ΡˆΠΈΠ» Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свСТий ΠΏΠ°Ρ€ΡˆΠΈΠ°Π» индСкс, Π΅ΠΌΡƒ большС Π½Π΅ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ ΠΈ стал снова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ старый.

ΠœΡ‹ снова Π½Π° этапС Suppose it! Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°Π³Π½ΠΎΠ·, Π² Π΄ΡƒΡ…Π΅ Π΄ΠΎΠΊΡ‚ΠΎΡ€Π° Π₯ауса:

Π”Π°Π²Π°ΠΉ вмСстС пройдСмся ΠΏΠΎ этому SQL. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ всС поля Π±ΠΈΡ‚Π²Ρ‹ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΠΈΡ‚Π² статус ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π΅Π½ β€œΠΆΠ΄Ρƒ игроков” ΠΈ ставка мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½Π° Π½Π΅ΠΊΠΎΠ΅ΠΌΡƒ числу. Пока всС понятно. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ слагаСмоС условия выглядит ΠΆΡƒΡ‚ΠΊΠΎ.

ΠœΡ‹ ΠΈΡ‰Π΅ΠΌ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ подзапроса. Π”ΠΎΡΡ‚Π°Π½ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ участий Π² Π±ΠΈΡ‚Π²Π°Ρ…, Π³Π΄Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±ΠΈΡ‚Π²Ρ‹ совпадаСт ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ участника ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΈΠ³Ρ€ΠΎΠΊΡƒ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ мноТСство описанноС Π² подзапросС.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Π‘Π»ΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ, Π½ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ этим подзапросом ΠΌΡ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ Π±ΠΈΡ‚Π²Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ³Ρ€ΠΎΠΊ ΡƒΠΆΠ΅ участвуСт. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ ΠΎΠ±Ρ‰ΠΈΠΉ explain запроса ΠΈ Π²ΠΈΠ΄ΠΈΠΌ Planning time: 0.180 ms, Execution time: 12.119 ms. ΠœΡ‹ нашли сообщника!

Настало врСмя ΠΌΠΎΠ΅ΠΉ любимой ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠΈ, которая гуляСт ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°ΠΌ с 2008 Π³ΠΎΠ΄Π°. Π’ΠΎΡ‚ ΠΎΠ½Π°:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Π”Π°! Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² запросС встрСчаСтся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ количСство записСй Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² памяти Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠ»Ρ‹Ρ‚ΡŒ этот ΠΌΠ΅ΠΌ с Π±ΠΎΡ€ΠΎΠ΄ΠΎΠΉ ΠΈ кудрями.

На самом Π΄Π΅Π»Π΅ Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈ сСбС эту ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, Π° Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ распСчатай ΠΈ повСсь Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах Π² офисС.

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ подзапрос Π½Π° LEFT JOIN WHERE B.key IS NULL, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ запрос Π±Π΅ΠΆΠΈΡ‚ сразу ΠΏΠΎ Π΄Π²ΡƒΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ. ΠœΡ‹ присоСдинили β€œΡΠ»Π΅Π²Π°β€ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с записями участий Π² Π±ΠΈΡ‚Π²Π°Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ условиС Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ участия Π½Π΅ сущСствуСт. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ explain analyze ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ запроса: Planning time: 0.185 ms, Execution time: 0.337 ms. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ запросов Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΌΠ½Π΅Π²Π°Ρ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΡˆΠΈΠ°Π» индСкс, Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ самый быстрый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. БбСТавший Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈ Π΅Π³ΠΎ сообщник ΠΏΡ€ΠΈΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Ρ‹ Π½Π° ΠΏΠΎΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Π·Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ строгого Ρ€Π΅ΠΆΠΈΠΌΠ°. Π‘Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ слоТнСС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ запросов Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ B2B сСрвиса для строитСлСй

Как вырасти Π² 10 Ρ€Π°Π· ΠΏΠΎΠ΄ количСству запросов ΠΊ Π‘Π” Π½Π΅ пСрССзТая Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ систСмы? Π― расскаТу, ΠΊΠ°ΠΊ ΠΌΡ‹ Π±ΠΎΡ€ΠΎΠ»ΠΈΡΡŒ с ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ нашСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ SQL запросы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π½Π΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ расходы Π½Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы.

Π― дСлаю сСрвис для управлСния бизнСс процСссами Π² ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… компаниях. Π‘ Π½Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 3 тысяч ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ. Π‘ΠΎΠ»Π΅Π΅ 10 тысяч Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с нашСй систСмой ΠΏΠΎ 4-10 часов. Она Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ планирования, оповСщСния, прСдупрСТдСния, валидации… ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ PostgreSQL 9.6. Π’ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρƒ нас ΠΎΠΊΠΎΠ»ΠΎ 300 Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ сутки Π² Π½Π΅Π΅ поступаСт Π΄ΠΎ 200 ΠΌΠ»Π½ запросов (10 тысяч Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ…). Π’ срСднСм Ρƒ нас 3-4 тысяч запросов Π² сСкунду, Π² самыС Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π±ΠΎΠ»Π΅Π΅ 10 тысяч запросов Π² сСкунду. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ запросов β€” OLAP. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΉ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΉ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ OLTP Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшая. ВсС эти Ρ†ΠΈΡ„Ρ€Ρ‹ я ΠΏΡ€ΠΈΠ²Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π± нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ насколько наш ΠΎΠΏΡ‹Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для вас.

ΠšΠ°Ρ€Ρ‚ΠΈΠ½Π° пСрвая. ЛиричСская

ΠšΠ°Ρ€Ρ‚ΠΈΠ½Π° вторая. БтатистичСская

Π˜Ρ‚Π°ΠΊ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠΊΠΎΠ»ΠΎ 10 тысяч Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° нашСй Π‘Π” Π·Π° сутки. Из этих 10 тысяч Π΅ΡΡ‚ΡŒ монстры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ 2-3 ΠΌΠ»Π½ Ρ€Π°Π· со срСдним Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния 0.1-0.3 мс ΠΈ Π΅ΡΡ‚ΡŒ запросы со срСдним Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния 30 сСкунд, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ 100 Ρ€Π°Π· Π² сутки.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС 10 тысяч запросов Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ»ΠΎΡΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ, поэтому ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, ΠΊΡƒΠ΄Π° Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ усилия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π‘Π” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. ПослС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΡ‹ стали Π΄Π΅Π»ΠΈΡ‚ΡŒ запросы Π½Π° Ρ‚ΠΈΠΏΡ‹.

TOP запросы

Π­Ρ‚ΠΎ самыС тяТСлыС запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ большС всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (total time). Π­Ρ‚ΠΎ запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΈΠ±ΠΎ ΠΎΡ‡Π΅Π½ΡŒ часто Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΈΠ±ΠΎ запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ (Π΄ΠΎΠ»Π³ΠΈΠ΅ ΠΈ частыС запросы Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΅Ρ‰Π΅ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… итСрациях Π±ΠΎΡ€ΡŒΠ±Ρ‹ Π·Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ). Π’ ΠΈΡ‚ΠΎΠ³Π΅ суммарно Π½Π° ΠΈΡ… исполнСниС сСрвСр Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ большС всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠΏ запросы ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎ IO time. Бпособы ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… запросов Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅.

ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° всСх ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ- Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с TOP запросами. Π˜Ρ… Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, оптимизация Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ запроса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ 5-10% рСсурсов. Однако, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ β€œΠ²Π·Ρ€ΠΎΡΠ»Π΅Π½ΠΈΡβ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° оптимизация TOP запросов становится всС Π±ΠΎΠ»Π΅Π΅ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. ВсС простыС способы ΡƒΠΆΠ΅ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹, Π΄Π° ΠΈ самый β€œΡ‚ΡΠΆΠ΅Π»Ρ‹ΠΉβ€ запрос ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅Ρ‚ β€œΠ²ΡΠ΅Π³ΠΎβ€ 3-5% рСсурсов. Если TOP запросы Π² суммС Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΌΠ΅Π½Π΅Π΅ 30-40% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎ скорСС всСго Π²Ρ‹ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠ»ΠΈ усилия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ быстро ΠΈ ΠΏΡ€ΠΈΡˆΠ»Π° ΠΏΠΎΡ€Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹.
ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопрос сколько Π²Π΅Ρ€Ρ…Π½ΠΈΡ… запросов Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² эту Π³Ρ€ΡƒΠΏΠΏΡƒ. Π― ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±Π΅Ρ€Ρƒ Π½Π΅ мСньшС 10, Π½ΠΎ Π½Π΅ большС 20. Π‘Ρ‚Π°Ρ€Π°ΡŽΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ послСднСго Π² TOP Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΎΡΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 10 Ρ€Π°Π·. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли врСмя исполнСния запросов Ρ€Π΅Π·ΠΊΠΎ ΠΏΠ°Π΄Π°Π΅Ρ‚ с 1 мСста Π΄ΠΎ 10, Ρ‚ΠΎ Π±Π΅Ρ€Ρƒ TOP-10, Ссли ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»Π°Π²Π½ΠΎΠ΅, Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π΄ΠΎ 15 ΠΈΠ»ΠΈ 20.
Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

БСрСдняки (medium)

Π­Ρ‚ΠΎ всС запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ сразу Π·Π° TOP, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ послСдних 5-10%. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ этих запросов кроСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сильно ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвСра. Π­Ρ‚ΠΈ запросы ΠΌΠΎΠ³ΡƒΡ‚ β€œΠ²Π΅ΡΠΈΡ‚ΡŒβ€ Π΄ΠΎ 80%. Но Π΄Π°ΠΆΠ΅ Ссли ΠΈΡ… доля ΠΏΠ΅Ρ€Π΅Π²Π°Π»ΠΈΠ»Π° Π·Π° 50%, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΠΎΡ€Π° Π½Π° Π½ΠΈΡ… Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π₯вост (tail)

Как Π±Ρ‹Π»ΠΎ сказано, эти запросы ΠΈΠ΄ΡƒΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΈ Π½Π° Π½ΠΈΡ… ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ 5-10% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΎ Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ‹Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ автоматичСскиС срСдства Π°Π½Π°Π»ΠΈΠ·Π° запросов, Ρ‚ΠΎΠ³Π΄Π° ΠΈΡ… оптимизация Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ дСшСво ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ.

Как ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ?

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ SQL запрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ для PostgreSQL (ΡƒΠ²Π΅Ρ€Π΅Π½ Ρ‡Ρ‚ΠΎ для ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Π‘Π£Π‘Π” ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ запрос)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запроса- Ρ‚Ρ€ΠΈ столбца, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запросов ΠΈΠ· этой Π³Ρ€ΡƒΠΏΠΏΡ‹. Π’Π½ΡƒΡ‚Ρ€ΠΈ запроса Π΅ΡΡ‚ΡŒ Π΄Π²Π° числа (Π² ΠΌΠΎΠ΅ΠΌ случаС это 20 ΠΈ 800), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отдСляСт запросы ΠΎΠ΄Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ соотносятся Π΄ΠΎΠ»ΠΈ запросов Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ сСйчас.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ оптимизация запросов

Из Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ доля TOP запросов Ρ€Π΅Π·ΠΊΠΎ снизилась, Π·Π°Ρ‚ΠΎ выросли β€œΡΠ΅Ρ€Π΅Π΄Π½ΡΠΊΠΈβ€.
ΠŸΠΎΠ½Π°Ρ‡Π°Π»Ρƒ Π² TOP запросы ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠ²Π΅Π½Π½Ρ‹Π΅ ляпы. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ дСтскиС Π±ΠΎΠ»Π΅Π·Π½ΠΈ исчСзли, доля TOP запросов ΡΠΎΠΊΡ€Π°Ρ‰Π°Π»Π°ΡΡŒ, ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ΡŒ всС большС усилий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ тяТСлыС запросы.

Π’ΠΎΡ‚ список самых часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π»ΠΈ Π½Π°ΠΌ ΡƒΡΠΊΠΎΡ€ΡΡ‚ΡŒ TOP запросы:

Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ запросов- Π³Ρ€ΡƒΠΏΠΏΡƒ сСрСдняков. Π’ Π½Π΅ΠΉ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС запросов ΠΈ казалось, Ρ‡Ρ‚ΠΎ Π½Π° Π°Π½Π°Π»ΠΈΠ· всСй Π³Ρ€ΡƒΠΏΠΏΡ‹ ΡƒΠΉΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Однако Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ запросов оказались ΠΎΡ‡Π΅Π½ΡŒ просты для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΠ»ΠΈΡΡŒ дСсятки Ρ€Π°Π· Π² Ρ€Π°Π·Π½Π»ΠΈΡ‡Π½Ρ‹Ρ… вариациях. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ примСняли ΠΊ дСсяткам ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… запросов ΠΈ каТдая Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… запросов Ρ€Π°Π·Π³Ρ€ΡƒΠΆΠ°Π»Π° Π‘Π” Π½Π° 3-5%.

НапримСр, вмСсто запроса для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ всСх Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΏΠΎ большой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ доставок (DELIVERY)

сдСлали запрос ΠΏΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ PERSON

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ запрос ΡƒΠ΄Π°Π²Π°Π»ΠΎΡΡŒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΡ€ΠΎΠΉ Π² 3-1000 Ρ€Π°Π·. НСсмотря Π½Π° Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΏΠΎΠ½Π°Ρ‡Π°Π»Ρƒ Π½Π°ΠΌ казалось, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ смысла Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся 10 мс, Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² 3-ю ΡΠΎΡ‚Π½ΡŽ самых тяТСлых запросов ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π‘Π” Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ сотыС Π΄ΠΎΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°. Но примСняя ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… запросов ΠΌΡ‹ ΠΎΡ‚Ρ‹Π³Ρ€Ρ‹Π²Π°Π»ΠΈ ΠΏΠΎ нСсколько ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° Ρ€ΡƒΡ‡Π½ΠΎΠΉ просмотр всСх сотСн запросов ΠΌΡ‹ написали нСсколько простых скриптов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ запросы. Π’ ΠΈΡ‚ΠΎΠ³Π΅ автоматичСский поиск Π³Ρ€ΡƒΠΏΠΏ запросов ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π½Π°ΠΌ Π΅Ρ‰Π΅ большС ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΠ² скромныС усилия.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΆΠ΅Π»Π΅Π·Π΅. БрСднСсуточная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΊΠΎΠ»ΠΎ 30%, Π² ΠΏΠΈΠΊΠ°Ρ… Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ 70%. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ запросов ΠΊΠ°ΠΊ ΠΈ количСство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ выросло ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 10 Ρ€Π°Π·. И всС это благодаря постоянному ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ этих самых Π³Ρ€ΡƒΠΏΠΏ запросов TOP-MEDIUM. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ запрос появляСтся Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ TOP, ΠΌΡ‹ Π΅Π³ΠΎ Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ пытаСмся ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ. Π“Ρ€ΡƒΠΏΠΏΡƒ MEDIUM ΠΌΡ‹ Ρ€Π°Π· Π² нСдСлю просматриваСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скриптов Π°Π½Π°Π»ΠΈΠ·Π° запросов. Если ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡ… быстро мСняСм. Иногда Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π½ΠΎΠ²Ρ‹Π΅ способы ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ сразу ΠΊ нСскольким запросам.

По нашим ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π°ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ сСрвСр Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π΅Ρ‰Π΅ Π² 3-5 Ρ€Π°Π·. ΠŸΡ€Π°Π²Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ·Ρ‹Ρ€ΡŒ Π² Ρ€ΡƒΠΊΠ°Π²Π΅- ΠΌΡ‹ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ SELECT- запросы Π½Π° Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ, ΠΊΠ°ΠΊ рСкомСндуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ. Но ΠΌΡ‹ этого Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ осознанно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ…ΠΎΡ‚ΠΈΠΌ сначала Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΈΡΡ‡Π΅Ρ€ΠΏΠ°Ρ‚ΡŒ возмоТности Β«ΡƒΠΌΠ½ΠΎΠΉΒ» ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Β«Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ Π°Ρ€Ρ‚ΠΈΠ»Π»Π΅Ρ€ΠΈΡŽΒ».
ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ взгляд Π½Π° ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠšΡƒΠΏΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ сСрвСр, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя спСциалистов. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΠΈΡ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ Π΄ΠΎΡ€ΠΎΠ³ΠΎ, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ Π»ΠΈΠΌΠΈΡ‚Ρ‹ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Ρƒ нас Π΅Ρ‰Π΅ Π½Π΅ исчСрпаны. Однако Π² 10 Ρ€Π°Π· выросло лишь количСство запросов. Π—Π° нСсколько Π»Π΅Ρ‚, увСличился Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» систСмы ΠΈ сСйчас разновидностСй запросов стало большС. Π’ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π», Π·Π° счСт ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ выполняСтся мСньшим количСством запросов, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ эффСктивных запросов. Π—Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠΆΠ½ΠΎ смСло ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ Π½Π° 5, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ коэффициСнт ускорСния. Π˜Ρ‚Π°ΠΊ ΠΏΠΎ самым скромным подсчСтам ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ускорСниС составило 50 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·. Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ сСрвСр Π² 50 Ρ€Π°Π· обошлось Π±Ρ‹ Π΄ΠΎΡ€ΠΎΠΆΠ΅. ОсобСнно учитывая, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ провСдСнная оптимизация Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ всС врСмя, Π° счСт Π·Π° Π°Ρ€Π΅Π½Π΄ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ сСрвСр ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ мСсяц.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *