Het genereren van een script van de databasemetagegevens nodig voor het maken van een database die alleen statistieken in SQL Server

Van toepassing: SQL Server 2014 DeveloperSQL Server 2014 DeveloperSQL Server 2014 Enterprise

INLEIDING


De volgende soorten informatie wordt queryoptimalisatie in Microsoft SQL Server een optimale queryplan bepalen:
  • De databasemetagegevens
  • De hardwareomgeving
  • De sessiestatus database
Meestal moet u deze dezelfde typen van informatie simuleren als u wilt dat het probleem van de query optimizer op een testsysteem reproduceren.

Microsoft Customer Support Services gevraagd voor het genereren van een script van de databasemetagegevens. Microsoft Customer Support Services gebruikt dit script van de databasemetagegevens een optimizer probleem onderzoeken. In dit artikel worden de stappen beschreven voor het genereren van het script statistieken. Tevens wordt beschreven hoe de query optimizer maakt gebruik van de informatie.

Meer informatie


Als u SQL Server 2005, voordat u de stappen voor het genereren van het script, zorg ervoor dat de SQL Server Management Studio de versie van SQL Server 2005 Service Pack 2 of hoger is. Als u eerdere versies van SQL Server Management Studio in SQL Server 2005 gebruikt, bevat de Wizard Script niet alle benodigde opties voor de stappen in dit artikel correct te laten werken.

De gehele database script

Wanneer u een database van de kloon alleen-statistieken genereert, is het mogelijk eenvoudiger en betrouwbaarder om een script de hele database in plaats van afzonderlijke objecten scripting. Wanneer u een de hele database script, wordt de volgende voordelen:
  • Zo voorkomt u problemen met ontbrekende afhankelijke objecten die nodig zijn om het probleem te reproduceren.
  • U moet aanzienlijk minder stappen om de benodigde objecten te selecteren.
Opmerking Als u een script voor een database genereren en de metagegevens voor de database duizenden objecten bevat, neemt het scriptprogramma proces veel CPU-bronnen. U wordt aangeraden het script te genereren tijdens daluren. Of kunt u de tweede optie voor het genereren van het script voor afzonderlijke objecten.

Elke database waarnaar wordt verwezen door de query in scripts, als volgt te werk:
  1. Open SQL Server Management Studio.
  2. In Object ExplorerVouw Databasesuit en Ga naar de database die u script wilt.
  3. Klik met de rechtermuisknop op de database, wijst u takenen klik op Scripts genereren.
  4. Controleer of de juiste database is ingeschakeld in de Wizard Script. Schakel het selectievakje alle Script-objecten in de geselecteerde database in en klik op volgende.
  5. In het dialoogvenster Opties kiest , moet u de volgende instellingen wijzigen van de standaardwaarde in de waarde die wordt weergegeven in de volgende tabel.
    Optie scriptsWaarde selecteren
    ANSI-opvullingTrue
    Scripts op de fout gaanTrue
    Script genereren voor afhankelijke objectenTrue
    Namen van systeem-beperkingTrue
    Script-sorteringTrue
    Script-Database makenTrue
    Script-aanmeldingenTrue
    Script-objectmachtigingen op gebruikersniveauTrue
    Script statistiekenScript statistieken en histogrammen
    Script-indexenTrue
    Triggers van scriptTrue
    Opmerking De optie Script aanmeldingen en de Machtigingen Script niveau kunnen worden overgelegd, tenzij het schema bevat objecten die eigendom zijn van aanmeldingen dan dbo.
  6. Klik op volgende.
  7. Klik op de optie Script bestand en geef vervolgens een bestandsnaam.
  8. Klik op Voltooien.

Afzonderlijke objecten script

U kunt alleen script afzonderlijke objecten waarnaar wordt verwezen door een bepaalde query in plaats van de volledige database scripting. Echter, tenzij alle database-objecten die zijn gemaakt met behulp van de component met SCHEMABINDING, de afhankelijkheidsinformatie in de systeemtabel sys.depends altijd mogelijk niet nauwkeurig. Deze onnauwkeurigheden kan een van de volgende problemen veroorzaken:
  • Het script-proces wordt niet een afhankelijk object script.
  • Het script-proces kan script-objecten in de verkeerde volgorde. Het script is uitgevoerd, moet u handmatig het gegenereerde script bewerken.
Daarom raadzaam niet dat u afzonderlijke objecten script, tenzij de database veel objecten heeft en scripts anders te lang duurt. Als u afzonderlijke objecten script, moet u als volgt te werk:
  1. Vouw Databasesuit en zoek vervolgens de database die u script wilt in SQL Server Management Studio.
  2. Klik met de rechtermuisknop op de database en wijs Database Script als bestandte maken met.
  3. Geef een bestandsnaam en klik vervolgens op Opslaan.

    Worden vastgelegd in het databasevenster core scripts. Deze container bevat bestanden, bestandsgroepen, database en eigenschappen.
  4. Klik met de rechtermuisknop op de database, wijst u takenen klik op Scripts genereren.
  5. Zorg ervoor dat de juiste database is geselecteerd en klik op volgende.
  6. In het dialoogvenster Opties kiest , moet u de volgende instellingen wijzigen van de standaardwaarde in de waarde die wordt weergegeven in de volgende tabel.
    Optie scriptsWaarde selecteren
    ANSI-opvullingTrue
    Scripts op de fout gaanTrue
    Namen van systeem-beperkingTrue
    Script genereren voor afhankelijke objectenTrue
    Script-sorteringTrue
    Script-aanmeldingenTrue
    Script-objectmachtigingen op gebruikersniveauTrue
    Script statistiekenScript statistieken en histogrammen
    Script-DATABASE gebruikenTrue
    Script-indexenTrue
    Triggers van scriptTrue
    Opmerking De optie Script aanmeldingen en de Machtigingen Script niveau kunnen worden overgelegd, tenzij het schema bevat objecten die eigendom zijn van aanmeldingen dan dbo.
  7. Selecteer in het dialoogvenster Objecttypen kiest u alle typen van een database-object dat de problematische query verwijst naar.

    Als de query verwijst alleen naar tabellen, bijvoorbeeld tabellenselecteren. Als de query wordt verwezen naar een weergave, selecteer tabellen en weergaven. Selecteer functiesals de problematische query een door de gebruiker gedefinieerde functie gebruikt.
  8. Wanneer u de objecttypen waarnaar wordt verwezen door de query hebt geselecteerd, klikt u op volgende.
  9. Er verschijnt een dialoogvenster voor elk type databaseobject dat u hebt geselecteerd in stap 7. In elk dialoogvenster selecteert u de tabellen, weergaven, functies of andere objecten in de database en klik op volgende.
  10. Klik op de optie Script bestand en geef dezelfde naam die u hebt opgegeven in stap 3.
  11. Klik op Voltooien als u wilt beginnen met het uitvoeren van scripts.
Wanneer het script is voltooid, verzendt u het scriptbestand naar de ondersteuningstechnicus van Microsoft. De ondersteuningstechnicus van Microsoft kan ook verzoeken de volgende informatie:
  • De hardwareconfiguratie, met inbegrip van het aantal processors en de hoeveelheid fysiek geheugen bestaat
  • De opties instellen die actief waren toen u de query uitvoert
Opmerking U hebt al verstrekt deze informatie door een rapport van SQLDiag of een trace SQL Profiler te verzenden. Ook gebruikt een andere methode om deze informatie te verstrekken.

Hoe wordt de informatie gebruikt

De volgende tabellen voor uitleg over hoe de query optimizer gebruikt deze informatie een queryplan selecteren.

Metagegevens

BeperkingenBeperkingen queryoptimalisatie vaak gebruikt voor het detecteren van strijdigheden tussen de query en het onderliggende schema. Als de query heeft bijvoorbeeld een "waar col = 5 '-component en een check-beperking '(col < 5) controleren' bestaat, wordt de query optimizer kent geen rijen komt overeen met.

De query optimizer kunt u soortgelijke inhoudingen op optie voor nulwaarden. Bijvoorbeeld, is de component "Waar col IS NULL" true of false afhankelijk van de optie voor nulwaarden in de kolom en of de kolom uit de buitenste tabel van een outer join worden bekend. De aanwezigheid van beperkingen voor REFERERENDE sleutel is handig om kardinaliteit en de juiste join-volgorde te bepalen. De query optimizer kunt beperking informatie gebruiken om joins te elimineren of te vereenvoudigen predikaten. Deze wijzigingen kunnen de vereiste toegang te krijgen tot de tabellen verwijderen.
StatistiekenDe statistische gegevens bevat dichtheid en een histogram waarin de verdeling van de belangrijkste kolom van de sleutel index en statistieken. Afhankelijk van de aard van het predicaat kan de query optimizer gebruik dichtheid of het histogram de kardinaliteit van een predikaat. Recente statistieken zijn vereist voor de kardinaliteit van nauwkeurige ramingen. De kardinaliteit ramingen worden gebruikt als input in de schatting van de kosten van een operator. Daarom hebt u goede kardinaliteit ramingen optimale queryplannen te verkrijgen.
Tabelgrootte (aantal rijen en pagina's)De query optimizer gebruikt de histogrammen en dichtheid voor het berekenen van de kans dat een bepaald predicaat waar of ONWAAR is. De schatting van de uiteindelijke kardinaliteit wordt berekend door de kans te vermenigvuldigen met het aantal rijen dat wordt geretourneerd door de exploitant van het kind. Het aantal pagina's in de tabel of de index is een factor bij het schatten van de i/o-kosten. Grootte van de tabel wordt gebruikt voor het berekenen van de kosten van een scan en is handig bij het schatten van het aantal pagina's die worden gebruikt tijdens het zoeken van een index.
Database-optiesVerschillende opties voor database optimalisatie kunnen worden beïnvloed. De opties AUTO_CREATE_STATISTICS en AUTO_UPDATE_STATISTICS bepalen of de query optimizer maakt nieuwe statistieken of update statistieken die verouderd zijn. Het niveau van parameters voorzien is van invloed op hoe de invoer voor de query met parameters voordat de invoer voor de query wordt doorgegeven aan de queryoptimalisatie. Parametriseren kan invloed hebben op de kardinaliteit schatting en kan overeenkomen met geïndexeerde weergaven en andere soorten optimalisaties. De instelling van de DATE_CORRELATION_OPTIMIZATION zorgt ervoor dat de optimizer om te zoeken naar correlaties tussen de kolommen. Deze instelling is van invloed op de kardinaliteit en kosten raming.

Omgeving

Opties instellen voor sessieANSI_NULLS instelling bepaalt of de "NULL NULL = ' expressie wordt geëvalueerd als true. De kardinaliteit van raming voor outer joins kan veranderen afhankelijk van de huidige instelling. Bovendien kunnen dubbelzinnig expressies veranderen. Bijvoorbeeld, de "col = NULL" expressie wordt geëvalueerd telkens anders, afhankelijk van de instelling. Echter, de "col IS NULL" expressie resulteert altijd hetzelfde.
HardwarebronnenDe kosten voor het sorteren en hash-operatoren zijn afhankelijk van de relatieve hoeveelheid geheugen die beschikbaar is voor SQL Server. Bijvoorbeeld als de grootte van de gegevens groter dan de cache is, de query optimizer weet dat de gegevens moet altijd in de wachtrij naar de schijf. Als de grootte van de gegevens veel kleiner dan de cache is, is de bewerking waarschijnlijk zal worden uitgevoerd in het geheugen. SQL Server tevens rekening gehouden met verschillende optimalisaties bekijken als de server meer dan één processor heeft en parallellisme met behulp van een geheugensteun voor het 'MAXDOP' of de optie maximale mate van parallellisme configuratie niet is uitgeschakeld.