Tutorial Básico Para Interpretar El Plan de Ejecución de SQL Server _ DevTroce

Embed Size (px)

DESCRIPTION

Plan de sql

Citation preview

  • InicioCategoras

    BasesdeDatosMsAccessFirebirdMsSQLPostgreSQLMySQLOracleInformixSQLiteMariaDB

    LenguajesAjaxASP.netC++C#.NetCSSDelphiHTMLGTKGWTJava

    ADFEJBHibernate

    VB.NetApacheEmpresas

    GoogleMicrosoft

    EncriptadoAES

    EscritoriosGnomeKDE

    EXTJSReporteadores

    CrystalReportsFastReportJasperReportReportingService

    HardwareAceleradorasGraficasGabinetes

    IDE

  • Megusta 7 Tweet

    CodeGearDreamweaverSQLServerManagementStudioEclipseJDeveloperNetBeansVisualStudio

    IISJBossSistemasOperativos

    AndroidGNU/LinuxUbuntuopenSuSEWindowsWindowsServerSolarisMacMaemo

    PlataformasConsolaDesktopWeb

    SeguridadTutoriales

    SobreelSitioRegistrarseLogin

    FollowonTwitter

    TutorialbsicoparainterpretarelplandeejecucindeSQLServer

    PararealizarSQLTunninganuestrasbasesdedatos,enlamayoradeloscasosnecesitaremospacienciaytiempoparaanalizarcondetenimientocomoestfuncionandotodo,asenbaseaeso,determinarmedidasdeaccinparalaoptimizacin.

    ParaverelplandeejecucindeunqueryesmuysencilloenSSMS,podemosverelEstimadoyelReal:

    PlandeEjecucinEstimado:DesdeelMenConsultas>MostrarPlandeEjecucinEstimadooconlacombinacindeteclasCtrl+L.Estonoejecutarlaquerysinomsbienloanalizarymostrarunaaproximacindelcostodesuejecucin.

    PlandeEjecucinReal:DesdeelMenConsultas>IncluirPlandeEjecucinRealoconlacombinacindeteclasCtrl+M.Conestaopcin

  • podremosverelcostorealdeunaquery,peroadiferenciadelanterior,semuestraalterminarlaejecucindelamisma.

    Tambinotraopcinesejecutaresto,quenosmostrarenmodotextoelplandeejecucin.

    Veamoslasdistintasopcionesquepuedenapareceryenquesituacionesdeberanhacerlo.

    TableScanEstoindicaqueelmotornecesitaleercompletamentelatablasinutilizarunndice.Enlamayoradeloscasossuaparicinquieredecirqueestamoshaciendomallascosas,ynecesitamosurgentecrearunndiceoreestructurarlosiyaexistealguno.Aunquenosiempreesas,elmotorsiempreintentapredecirloscostosdeejecucinbasadosenlasestadsticasquevaalmacenando,sielestimaquevasermsrpidoleertodalatablaenvezdeleerunndice,usaresemtodo.Estosuelesucedercontablaspocopobladasylaqueryencuestinnoconllevaningnfiltro,yaquereduceconsiderablementeeloverhead.Ejemplo:

    ClusteredIndexScanEssemejantealTableScan,yaquerecorrecompletamentelatablaperoutilizandostavezalgunodelosndicesclustereddelquedispone.Aparecenormalmenteentablasqueestnpobladasconsiderablemente.Ejemplo:

    SETSHOWPLAN_ALL{ON|OFF}

    SELECT*FROMtabla;

    SELECT*FROMtabla;

  • ClusteredIndexSeekVerestoessntomadeuncorrectousodelosndicesclusteredenlabasededatos,paraverloenaccinsimplementetenemosquetrabajarconloscamposquetienendices,Ejemplo:

    IndexScanEsteesmuyparecidoalTableScanyClusteredIndexScan,laprincipaldiferenciaradicaenquesteutilizaunndiceNonClusteredpararecorrerlatabla.JustamenteparaestaseccinylasquevienenmsabajohaceunosdasescribunartculoquelesayudaradiferenciarentreunIndiceAgrupadoyunoNoAgrupado.Aunquemuchasvecessuelesersntomadeunmalusodelosndices,tambinaparececuandousamoslasclusulasORDERBY,JOINoGROUPBY.Ejemplo

    IndexSeek

    SELECT*FROMtablaWHEREcolumna=44;

    SELECTcolumnaNonClusteredFROMtablaORDERBYcolumnaNonClustered

  • Yavasiendoobvioquehaceelindexseek,trabajaigualqueelClusteredIndexSeek,perotrabajarconunIndiceNonClustered.SiEjemplo:

    BookmarkLookupConloyavistoenelarticuloanteriorcomprenderemosmejorcomofuncionaelBookmarkLookup.DebemoscomprenderquenopodremosevitartenerestetipodeoperacinenlaBD,loquesisedebebuscaresqueseamnimasuaparicinycuandolohace,lohagaconuncostobajo.

    Esteaparececuandoserequierehacerunsaltodelapuntadordelndicenonclusteredalapginasdedatosreal.Unadelasmanerasparaevitarsuaparicinexcesivaeslimitarloscamposrequeridosenlaquery,slosolicitarlosqueestnincluidosenelndice,staeslaprincipalraznporlaquehabrnescuchadomsdeunavez,noescribasquerysSELECT*FROM...

    Enalgunoscasosextremos(repito,muyextremos)sepodraconsiderarlainclusindetodaslascolumnasdelatabladentrodelndice.

    UnadelasmejorasqueseintrodujoapartirdeSQLServer2005,esqueenlosndicesNonClusteredsepuedenagregarocopiarelcontenidodelascolumnas,sinqueestasseanpartedelndiceens,esdecir,quenoservirnpararealizarbsquedasnifiltrosperosicuandolosnecesitemostrartendrunacopiaamanodelosdatos,sintenerlanecesidaddeusarelpunteroparabuscarenlatablaeldato.Estacaractersticaesunarmadedoblefilo,sibienesciertoquesiselousabienpodrareducirconsiderablementeelcostodelasconsultas,perosuladocontraproducente,esquealtenermsdatoslosndices,estoscrecenrpidamenteporqueocupanmsespacioyporendesetienenmenosclavesporcadapginadendiceloquepodrallegaraaumentarelnivel

    SELECTcolumnaNonClusteredFROMtablaWHEREcolumnaNonClustered=44;

  • deI/O.Asque,debenconsiderarelcontextoparautilizarlo.

    RIDLookupEsteoperadornoesmuyfrecuentedever,ynormalmenteaparececuandoelmotorintentaoptimizarporsucuentalaqueryynotenemosunndiceagrupado(Clustered)entoncesbuscaratravsdelndicenicoROWID(deahelnombreRID).Sirequieresolucinestetipodeoperacionesesmuydependientedecaso.Ejemplo

    SortEstaoperacinveremoscuandoelmotorrequiereordenaralgncampoquenoestindizado,porejemplocuandoaplicamoslaclusulaORDERBY,GROUPBY,TOP,etc.Normalmentecuandoaparecedebemosecharojo,parasabersifaltaalgnndiceenalgunatabla,peronosiempreesas,llenardendiceslaBDnoessanotampoco,yexistenocasionesquedebemosejecutarqueryspocofrecuentesquenoameritanlacreacindeotrondicems.

    SELECTcolumna1,columna2FROMtablaWHEREcolumna1

  • JOINEloperadorJOINsedivideentrestiposdeJOINnuevamente.EntranenaccincuandojustamentesehacenusodelasclusulasJOINparaunirdosomstablasenlaqueryyestdeterminadonormalmenteporelvolumendedatosconelquesetrabajarparaqueSQLServerelijausarunouotro.

    NestedLoopJoinNormalmentevemosesteoperadorcuandoelvolumendedatosconelquesetrabajaresrelativamentepequeo.Ejemplo.

    MergeJoinEsteoperadoraligualqueelanteriorsehacesuaparicinenlaunindetablas,perocuandoelvolumendedatosesconsiderablementemsgrande,hablamosdecientosdemilescomunmente

    SELECT*FROMtabla1t1INNERJOINtabla2t2ONt1.columna=t2.columna

    SELECT*FROMtabla1t1INNERJOINtabla2t2ONt1.columna=t2.columna;

  • HashJoinEstetipodeJOINesmuyespecificoparagrandesvolmenesdedatos,especialmentesinoestnindizados.SinosapareceennuestraBDOLTP,deberamospreocuparnosyaqueestpensadoenfuncionarmejorensobrelosdiseosOLAP,asquesinoestntrabajandoconalgnDATAWAREHOUSING,esmuypocoprobablequelesseatil.ElHashJoinestodounmundoaparte,ymereceunartculodedicadonetamenteal,asqueextenderemoseltemamsadelante.

    HashMatchCuandovenesteoperadoresporqueelmotorestcompandocontenido,puedeaparecerenunJOIN,WHEREysonlugaresdondenodeberanestar,lohacenporfaltadeindicesprincipalmente.DondesisonmuytilesescuandoincluimoslaclusulaDISTINCT,UNION,UNIONALL,endondenosolosecomparaelvalordeuncampo,sinodetodounconjuntodecolumnasoinclusofilasycolumnas.

  • StreamAggregateApareceprincipalmentecuandoagrupamoslosdatos,ymezclamosconfuncionesagregadascomoMIN,SUM,AVG,tambinconlaclusulaHAVING.TambinesfrecuenteverqueesteoperadorllevaacompaadoaSORT,aquienutilizaparaordenarprimeramentelosdatosantesdeagrupar.

    Paracomplementaryprofundizarestesencilloarticulo,existenmuchoslibrosquepuedenleer.LamayorpartedelabuenainformacinseencuentraenInglesperovalelapenaleerlo.Lesdejounodeloslibrosgratuitosquetocaeltema,escritoporRedGate.

    [ 6 ) k

    Youmayalsolike:

    PaginarconsultasSQLconSQLServer2012osuperior

    PAGINARCONSULTASSQLCONSQLSERVER

    ForzaramodoImplcitolastransaccionesenSQLServer

    FORZARAMODOIMPLCITOLASTRANSACCIONESENSQLSERVER

    CrearConsultasSQLconfiltrosdinmicosdemaneraeficiente

    CREARCONSULTASSQLCONFILTROSDINMICOS

    ConfigurarSQLServerparaalmacenarelestadodelasesindeASP.NET

    CONFIGURARSQLSERVERPARAALMACENARELESTADO

    GetRidofYourEyeBagsinMinutesBeautyandSkin101

    ComoejecutarSQLdinmicoenSQLServer

    COMOEJECUTARSQLDINMICOENSQL

    TipsparaoptimizarelrendimientodeSQLServer

    ComodepurarenSQLServer2008pasoapaso:Procedimientosalmacenados,triggersyfunciones

    19 7

  • 4agosto2011

    Ver5comentariosPorGeekZeroShortURLBasesdeDatosMsSQLOptimizacionTutoriales

    ComentariosdesdeFacebook:

    A19personaslesgustaesto.Registrarteparaverqulesgustaatusamigos.Megusta

    AdsbyShareaholic

  • Ver5comentarios

    DejatuComentario

    1.Sebastian 25septiembre2013at09:06#

    Muybuenainfo..Gracias!!

    Responder

    2.Maritus 23julio2012at09:31#

    Muchasgraciasporeltutorial,mevienedemaravilla,yaqueestoycomenzandoconestodeSQLSERVER..

    Responder

    5comentarios Ordenarpor

    FranciscoAngelJavierPrietoGerentePropietarioenCreacionesintegralesRealmenteunaplausodesdeelalmaparaelautordeestagua!!!

    MegustaResponder 411deoctubrede201212:31

    GabrielaFalcnExcelentegua!!MegustaResponder22deoctubrede201212:04

    SergioA.GaticaM.TrabajaenIBot,SolucionesInformaticasexcelente.gracias!!MegustaResponder20denoviembrede201215:06

    NicolasPazFilgueiraBuenosAiresBuenisima!MegustaResponder1demarzode201312:24

    ElvinMartinezCornielleSantoDomingoMuybuena.....

    MegustaResponder 14dediciembrede20135:18

    FacebookCommentsPlugin

    Losmsantiguos

    Agregaruncomentario...

  • Responder

    Trackbacks/Pingbacks

    1. RendimientoenSQLSERVER|devblogdooflow 27marzo2015

    []http://devtroce.com/2011/08/04/tutorialbasicoparainterpretarelplandeejecuciondesqlserver/[]

    2. ClausulaINvsBETWEENAND[SQLTunning]|DevTroce.com 26julio2012

    []ParacomprenderstearticulorecomiendoquehagaunalecturaintroductoriasobrelainterpretacindelosplanesdeejecucinenSQLServer.LoquedemostraremosserlaventajaenrendimientodelBETWEENANDsobrela[]

    3. ComooptimizarlasquerysconclusulaLIKEenSQL[SQLTunning]|DevTroce.com 5agosto2011

    []SibienexistenvariosargumentosquepodemosagregaralLIKE,elmscomnypesadoeselcomodn(%).Esteproblema,siselopuedellamarasocurrenenSQLServer,Oracle,PostgreyMySQL(probablementeenotrosmotorestambin,peronomeconstan)ascomolasolucinqueveremosaplicaatodosellos.Sirequierencomprenderelplandeejecucinpuedenleerloaqu.[]

    Responder

    YourName YourEmail YourURL

    B i U del Code

    Notificarmeamiemailsihaynuevoscomentarios

    No soy un robotreCAPTCHA

    Privacidad - Condiciones

    EnviarComentarioBuscasalgo? Buscar

    BuscarconGoogle

    Siguenos!

  • Email:RevisatucarpetaSpamsinotellegaelcorreo

    Suscribirme,esgratis!

    Categoras

    Categoras Elegircategora

    Histrico

    Histrico Elegirmes

    Etiquetas

    UltimosComentados

    newslnrdnr enComoprogramarennCapasconC#(Parte1)newslnr enComoprogramarennCapasconC#(Parte1)

  • Martha enComocrearreportesconCrystalReportsenASP.NetySQLServerWitness enTutorialdeProgramacinAndroid:ManejodeActivityGISELLE enMostrarimagenalmacenadaenlabasededatosconAsp.NetWashingtonPaul enComosaberqueproceso(PID)w3wp.exeperteneceacualAppPoolenIIS6Victor enValidarCertificadoSSLconVB.NetyC#.NetRendimientoenSQLSERVER|devblogdooflow enTutorialbsicoparainterpretarelplandeejecucindeSQLServerNotasTecnicas|Pearltrees enTipsparaoptimizarelrendimientodeSQLServervanessa enInstalarServidordeSubVersionenWindows

  • AvatarsbySterlingAdventures