Aanbevelingen voor optimalisatie in Azure Databricks

Traagzame queries en hoge rekenkosten komen meestal voort uit een paar oorzaken: het lezen van meer data dan een query nodig heeft, het schudden van data tussen nodes, het kiezen van een slecht queryplan of het herschrijven van bestanden die niet veranderd zijn. Azure Databricks pakt veel van deze oorzaken automatisch aan bij werklasten variërend van grootschalige ETL-verwerking tot ad-hoc, interactieve queries. Andere optimalisaties gelden alleen als je ze aanzet of afstemt voor een specifieke werklast.

Deze pagina begint met aanbevelingen voor de meeste workloads, groepeert vervolgens optimalisaties op basis van of ze automatisch draaien of vereisen dat je ze configureert, en beschrijft het probleem dat elke optimalisatie oplost. De meeste Databricks Runtime-optimalisaties vereisen Delta Lake, het standaardformaat voor tabellen in Azure Databricks.

Begin met deze aanbevelingen

Deze keuzes leveren de grootste prestatieverbeteringen op voor de meeste workloads. Ze helpen ook veel van de automatische optimalisaties op deze pagina optimaal te laten werken.

  • Gebruik Liquid clustering voor de indeling van de tabel.Liquid clustering vervangt tabelpartitionering en ZORDER. Het organiseert data op basis van de kolommen waarop je vaak filtert, wat data skipping en het dynamisch snoeien van bestanden verbetert.
  • Gebruik beheerde tabellen uit Unity Catalog.Voorspellende optimalisatie onderhoudt beheerde tabellen automatisch. Zie beheerde tabellen van Unity Catalog voor Delta Lake en Apache Iceberg.
  • Gebruik rekenkracht met Photon. Voorspellende I/O vereist Photon, en dat geldt ook voor dynamische bestandssnoei in MERGE, UPDATE, en DELETE statements. Zie Wat is Photon?
  • Schakel verwijderingsvectoren in. Predictive I/O gebruikt verwijderingsvectoren om te voorkomen dat hele bestanden worden herschreven tijdens updates, verwijderingen en merge's, en gelijktijdigheid op rijniveau vereist deze. Voor Delta Lake-tabellen moet je deletievectoren expliciet inschakelen. Zie Verwijderingsvectoren in Databricks.
  • Gebruik de nieuwste Databricks Runtime. Nieuwe versies bevatten de nieuwste prestatieverbeteringen. Sommige optimalisaties vereisen een minimale Databricks Runtime-versie of Photon-enabled compute. Zie elke pagina voor de vereisten.

Automatische optimalisaties

Deze optimalisaties staan standaard aan. Je hoeft ze niet in te schakelen, maar sommige leveren meer voordeel op wanneer je tabellen en compute aan bepaalde voorwaarden voldoen, zoals het gebruik van Photon of het up-to-date houden van de statistieken.

  • Schijfcaching: Versnelt queries die herhaaldelijk dezelfde externe Parquet- en Delta Lake-databestanden lezen. Azure Databricks cachet kopieën van de bestanden op de lokale opslag van compute-nodes zodat latere leesbewerkingen lokaal kunnen worden uitgevoerd. Azure Databricks schakelt het automatisch in op werkerinstantietypes die het ondersteunen.
  • Dynamische bestandspruning: Slaat bestanden over die geen overeenkomende rijen kunnen bevatten in joins op Delta Lake-tabellen. MERGE, UPDATE, en DELETE statements vereisen Photon-enabled compute voor dynamische bestandspruning.
  • Low shuffle merge: Versnelt MERGE bewerkingen die een paar rijen in elk bestand bijwerken of verwijderen. Low shuffle merge verwerkt ongewijzigde rijen zonder shuffle en behoudt hun bestaande data-indeling.
  • Adaptieve query-uitvoering: Optimaliseert queryplannen opnieuw terwijl queries draaien, gebaseerd op de werkelijke grootte van de data. Dit lost problemen met trage join-strategieën, te veel kleine taken en scheef verdeelde taken die voortkomen uit onnauwkeurige schattingen op.
  • Voorspellende I/O: Versnelt datascans en vermindert de hoeveelheid data die wordt herschreven tijdens updates, verwijderingen en samenvoegingen op Photon-enabled compute.
  • Kostengebaseerde optimizer: Gebruikt tabel- en kolomstatistieken om efficiënte queryplannen te kiezen, vooral voor queries met meerdere joins. De kostengebaseerde optimizer is afhankelijk van statistieken, dus verzamel deze en houd ze up-to-date.
  • Voorspellende optimalisatie: Voert OPTIMIZE, VACUUM, en ANALYZE automatisch uit op beheerde Unity Catalog-tabellen, dus je hoeft geen tabelonderhoud te plannen. Het houdt ook de statistieken die de kostengebaseerde optimizer gebruikt up-to-date. Om te controleren of het voor jouw account is ingeschakeld, zie Verifiëren of voorspellende optimalisatie is ingeschakeld.

Optimalisaties die je configureert

Deze optimalisaties vereisen dat je ze aanzet, afstelt of de tabelconfiguratie aanpast. Gebruik ze wanneer een werklast gedrag nodig heeft dat de standaardinstellingen niet dekken.

  • Archiefondersteuning: Gebruik wanneer cloudlevenscyclusbeleid oudere tabelbestanden naar archiefopslaglagen verplaatst om opslagkosten te verlagen. Archiveringsondersteuning vertelt Azure Databricks om bestanden die ouder zijn dan een bepaalde periode te negeren, zodat het levenscyclusbeleid geen query's breekt die alleen recente data lezen. Deze functie bevindt zich in openbare preview.
  • Range join: Gebruik wanneer joins een punt in een interval of een voorwaarde voor intervaloverlap gebruiken. Databricks SQL optimaliseert automatisch range-joins. Optimaliseer op andere compute range joins met join-hints of de sessieconfiguratie.
  • Isolatieniveaus en schrijfconflicten: Gebruik wanneer gelijktijdige schrijfacties naar dezelfde tabel conflicteren, of wanneer een werklast strengere garanties vereist dan het standaard WriteSerializable isolatieniveau. Serialiseerbare isolatie vermindert de doorvoer voor gelijktijdige schrijfopdrachten. Gelijktijdigheid op rijniveau lost automatisch veel conflicten op tussen gelijktijdige schrijfopdrachten op tabellen die voldoen aan de vereisten ervan.
  • Full-text zoekindexen: Gebruik wanneer zoekopdrachten tekstkolommen doorzoeken naar substrings of woorden met de functies search of isearch. De index slaat bestanden over die geen overeenkomende rijen kunnen bevatten. Deze functie bevindt zich in de bètaversie.

Notitie

Bloom-filterindexen zijn een verouderde functie voor het overslaan van gegevens. Ze voegen schrijfoverhead toe en zijn moeilijk af te stemmen. Als je tabellen ze hebben, zie dan Bloom filter-indexen (verouderd) om ze te vervangen en te verwijderen.

Andere prestatiekenmerken

  • Functies van hogere orde bieden ingebouwde, geoptimaliseerde prestaties voor veel bewerkingen die geen gemeenschappelijke Spark-operatoren hebben. Functies van hogere orde presteren beter dan door de gebruiker gedefinieerde functies.
  • Azure Databricks heeft ingebouwde operatoren en speciale syntaxis voor het werken met complexe datatypen, waaronder arrays, structs en JSON-strings.
  • Spark SQL-querys JSON-strings zonder ze eerst te parsen.
  • Om de grootte van de databestanden die geschreven worden te regelen, zie Grootte van gegevensbestanden beheren.
  • Voor richtlijnen voor tabelontwerp en onderhoud, zie Best practices: Delta Lake.

Diagnosticeer trage of kostbare workloads

Als een workload trager of duurder is dan verwacht en je weet niet waarom, gebruik dan de Spark UI om de bottleneck te vinden voordat je de configuratie verandert. Zie Diagnose van kosten- en prestatieproblemen met de Spark UI.