none
problemi di performance RRS feed

  • Domanda

  • Ciao a tutti

    sono un pò di giorni che sto avendo problemi con il mio server, è moolto lento.

    il server è una macchina virtuale non era una scheggia, ma lenta in questo modo non è mai stata. se fermo l'istanza sql torna a vivere.

    cosa posso fare?

    grazie

    mercoledì 6 aprile 2016 14:00

Risposte

  • Ciao Pietro,

    direi di creare l'indice sulla tabella [dbo].[TotaliGiornalieriPerCards] con il seguente codice:

    USE [ALS]; GO CREATE INDEX IDX_TotaliGiornalieriPerCards_GUIDStaz_Giorno ON [dbo].[TotaliGiornalieriPerCards] ( [GUIDStazione] ,[Giorno] ) INCLUDE ( [LisciaPagamento] ,[FrizzantePagamento] ,[LisciaGratuita] ,[FrizzanteGratuita] );

    GO

    Dopo una giornata di lavoro (significativa dal punto di vista delle operazioni eseguite), ne verificherei l'effettivo utilizzo eseguendo con la query 2 sul database ALS (nel mio precedente post mi sono dimenticato di specificare che la seconda query andava eseguita sul database di cui stiamo analizzando le performance).

    Con la creazione di questo indice mi aspetto un miglioramento delle performance, mi aspetto che più di 4000 operazioni di Scan si trasformino in altrettante operazioni di Seek :)

    Riesegui anche la query 1 (sempre del mio precedente post)..

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 




    venerdì 20 maggio 2016 21:41
    Moderatore

Tutte le risposte

  • Ciao Pietro,

    riesci a darci qualche dettaglio in più ? 
    Configurazione del server, versione di SQL Server, viene effettuata una manutenzione dei database (indici e statistiche), i rallentamenti sono generalizzati o si verificano in concomitanza di procedure particolari...


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD MCT Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.

    mercoledì 6 aprile 2016 17:15
  • L'utilizzo della memoria è nella norma trattandosi di SQL Server, secondo me non è da lì che possiamo identificare la causa dei rallentamenti. Hai provato con SQL Server Profiler? I rallentamenti li noti solo nell'esecuzione delle query, giusto?
    mercoledì 6 aprile 2016 19:43
    Moderatore
  • Ciao Pietro,

    oltre alle indicazioni di Danilo e Fabrizio, aggiungerei un controllo sull'host.. sono state aggiunte recentemente macchine virtuali che girano sullo stesso host fisico?

    I database che ospita l'istanza sono aumentati?

    Abbiamo sete di informazioni :)

    Ciao


    Sergio Govoni

    SQL Server MVP
    MVP Profile | English Blog | Twitter | LinkedIn

    mercoledì 6 aprile 2016 21:15
    Moderatore
  • ciao

    non so cosa sia sql server profiler, i rallentamenti li noto sul tutto il S.O

    però se fermo il db tutto torna nella norma.

    grazie


    martedì 3 maggio 2016 07:23
  • martedì 3 maggio 2016 08:07
    Moderatore
  • Ciao Pietro,

    hai avuto modo di raccogliere altre informazioni?

    Nel momento in cui rilevi i rallentamenti, prova ad eseguire queste due query sul database master..

    1) Wait types più significativi (Glenn Berry)

    -- Isolate top waits for server instance since last restart or wait statistics clear (Query 34) (Top Waits)
    WITH [Waits] 
    AS (SELECT wait_type, wait_time_ms/ 1000.0 AS [WaitS],
              (wait_time_ms - signal_wait_time_ms) / 1000.0 AS [ResourceS],
               signal_wait_time_ms / 1000.0 AS [SignalS],
               waiting_tasks_count AS [WaitCount],
               100.0 *  wait_time_ms / SUM (wait_time_ms) OVER() AS [Percentage],
               ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS [RowNum]
        FROM sys.dm_os_wait_stats WITH (NOLOCK)
        WHERE [wait_type] NOT IN (
            N'BROKER_EVENTHANDLER', N'BROKER_RECEIVE_WAITFOR', N'BROKER_TASK_STOP',
    		N'BROKER_TO_FLUSH', N'BROKER_TRANSMITTER', N'CHECKPOINT_QUEUE',
            N'CHKPT', N'CLR_AUTO_EVENT', N'CLR_MANUAL_EVENT', N'CLR_SEMAPHORE',
            N'DBMIRROR_DBM_EVENT', N'DBMIRROR_EVENTS_QUEUE', N'DBMIRROR_WORKER_QUEUE',
    		N'DBMIRRORING_CMD', N'DIRTY_PAGE_POLL', N'DISPATCHER_QUEUE_SEMAPHORE',
            N'EXECSYNC', N'FSAGENT', N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'FT_IFTSHC_MUTEX',
            N'HADR_CLUSAPI_CALL', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION', N'HADR_LOGCAPTURE_WAIT', 
    		N'HADR_NOTIFICATION_DEQUEUE', N'HADR_TIMER_TASK', N'HADR_WORK_QUEUE',
            N'KSOURCE_WAKEUP', N'LAZYWRITER_SLEEP', N'LOGMGR_QUEUE', 
    		N'MEMORY_ALLOCATION_EXT', N'ONDEMAND_TASK_QUEUE',
    		N'PREEMPTIVE_OS_LIBRARYOPS', N'PREEMPTIVE_OS_COMOPS', N'PREEMPTIVE_OS_CRYPTOPS',
    		N'PREEMPTIVE_OS_PIPEOPS', N'PREEMPTIVE_OS_AUTHENTICATIONOPS',
    		N'PREEMPTIVE_OS_GENERICOPS', N'PREEMPTIVE_OS_VERIFYTRUST',
    		N'PREEMPTIVE_OS_FILEOPS', N'PREEMPTIVE_OS_DEVICEOPS',
            N'PWAIT_ALL_COMPONENTS_INITIALIZED', N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',
    		N'QDS_ASYNC_QUEUE',
            N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP', N'REQUEST_FOR_DEADLOCK_SEARCH',
    		N'RESOURCE_QUEUE', N'SERVER_IDLE_CHECK', N'SLEEP_BPOOL_FLUSH', N'SLEEP_DBSTARTUP',
    		N'SLEEP_DCOMSTARTUP', N'SLEEP_MASTERDBREADY', N'SLEEP_MASTERMDREADY',
            N'SLEEP_MASTERUPGRADED', N'SLEEP_MSDBSTARTUP', N'SLEEP_SYSTEMTASK', N'SLEEP_TASK',
            N'SLEEP_TEMPDBSTARTUP', N'SNI_HTTP_ACCEPT', N'SP_SERVER_DIAGNOSTICS_SLEEP',
    		N'SQLTRACE_BUFFER_FLUSH', N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP', N'SQLTRACE_WAIT_ENTRIES',
    		N'WAIT_FOR_RESULTS', N'WAITFOR', N'WAITFOR_TASKSHUTDOWN', N'WAIT_XTP_HOST_WAIT',
    		N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG', N'WAIT_XTP_CKPT_CLOSE', N'XE_DISPATCHER_JOIN',
            N'XE_DISPATCHER_WAIT', N'XE_LIVE_TARGET_TVF', N'XE_TIMER_EVENT')
        AND waiting_tasks_count > 0)
    SELECT
        MAX (W1.wait_type) AS [WaitType],
        CAST (MAX (W1.WaitS) AS DECIMAL (16,2)) AS [Wait_Sec],
        CAST (MAX (W1.ResourceS) AS DECIMAL (16,2)) AS [Resource_Sec],
        CAST (MAX (W1.SignalS) AS DECIMAL (16,2)) AS [Signal_Sec],
        MAX (W1.WaitCount) AS [Wait Count],
        CAST (MAX (W1.Percentage) AS DECIMAL (5,2)) AS [Wait Percentage],
        CAST ((MAX (W1.WaitS) / MAX (W1.WaitCount)) AS DECIMAL (16,4)) AS [AvgWait_Sec],
        CAST ((MAX (W1.ResourceS) / MAX (W1.WaitCount)) AS DECIMAL (16,4)) AS [AvgRes_Sec],
        CAST ((MAX (W1.SignalS) / MAX (W1.WaitCount)) AS DECIMAL (16,4)) AS [AvgSig_Sec]
    FROM Waits AS W1
    INNER JOIN Waits AS W2
    ON W2.RowNum <= W1.RowNum
    GROUP BY W1.RowNum
    HAVING SUM (W2.Percentage) - MAX (W1.Percentage) < 99 -- percentage threshold
    ORDER BY [AvgWait_Sec] DESC
    OPTION (RECOMPILE);
    GO

    2) Latenza sottosistema di I/O (Paul Randal)

    SELECT
      [ReadLatency] = CASE WHEN [num_of_reads] = 0 THEN 0 ELSE ([io_stall_read_ms] / [num_of_reads]) END
      ,[WriteLatency] = CASE WHEN [num_of_writes] = 0 THEN 0 ELSE ([io_stall_write_ms] / [num_of_writes]) END
      ,[Latency] = CASE WHEN ([num_of_reads] = 0 AND [num_of_writes] = 0) THEN 0 ELSE ([io_stall] / ([num_of_reads] + [num_of_writes])) END
      --avg bytes per IOP 
      ,[AvgBPerRead] = CASE WHEN [num_of_reads] = 0 THEN 0 ELSE ([num_of_bytes_read] / [num_of_reads]) END
      ,[AvgBPerWrite] = CASE WHEN [io_stall_write_ms] = 0 THEN 0 ELSE ([num_of_bytes_written] / [num_of_writes]) END
      ,[AvgBPerTransfer] = CASE WHEN ([num_of_reads] = 0 AND [num_of_writes] = 0) THEN 0 ELSE (([num_of_bytes_read] + [num_of_bytes_written]) / ([num_of_reads] + [num_of_writes])) END
      ,LEFT ([mf].[physical_name], 2) AS [Drive]
      ,DB_NAME ([vfs].[database_id]) AS [DB]
      ,[mf].[physical_name]
    FROM
      sys.dm_io_virtual_file_stats (NULL,NULL) AS [vfs]
    JOIN
      sys.master_files AS [mf] ON [vfs].[database_id] = [mf].[database_id] AND [vfs].[file_id] = [mf].[file_id]
    -- WHERE [vfs].[file_id] = 2 -- log files -- 
    ORDER BY
      [Latency] DESC
    -- ORDER BY [ReadLatency] DESC ORDER BY [WriteLatency] DESC;
    GO

    Che valori ottieni in output? Prima di eseguirle, assicurati di non aver riavviato recentemente il server perchè entrambe le query si basano su valori cumulativi che vengono azzerati ad ogni riavvio del servizio principale di SQL Server.

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    mercoledì 11 maggio 2016 21:57
    Moderatore

  • Grazie


    venerdì 13 maggio 2016 09:59
  • Ciao Pietro,

    a mio parere i rallentamenti che hai notato sono dovuti a inefficienze nel sotto-sistema di I/O.. bisogna capirne le cause.

    Le attese del wait-type ASYNC_IO_COMPLETION possono essere dovute a:

    • Codice applicativo, o codice T-SQL all'interno del DB (Trigger, SP, ecc..), che elabora lentamente i dati (cicli, cursori, ecc..)
    • La corretta collocazione dei file è molto importante: tutti i file dati (.MDF) e i file di log (.LDF) sia dei database utente che dei DB di sistema risiedono sullo stesso volume (C:\) dove risiede anche il SO ed il TempDB.. Più si separa meglio è per le performance :)
    • Errata configurazione della SAN, controllerei il throughput del sistema SAN, così come la configurazione della coda HBA
    • Cattiva strategia di indicizzazione delle tabelle, se gli indici non sono appropriati, SQL Server sarà costretto ad effettuare molte operazioni di Scan, dovrà quindi effettuare molte operazioni di I/O e cicli di CPU

    I valori di latenza (ReadLatency e WriteLatency) sono molto molto alti..


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    venerdì 13 maggio 2016 22:09
    Moderatore
  • non ho questo informazioni essendo un server virtuale con openstack.
    sabato 14 maggio 2016 09:29
  • non ho questo informazioni essendo un server virtuale con openstack.

    Ciao Pietro,

    anche se non abbiamo informazioni sullo storage e sulla configurazione della SAN, io verificherei comunque il primo e l'ultimo punto ovvero:

    • Codice applicativo, o codice T-SQL all'interno del DB (Trigger, SP, ecc..), che elabora lentamente i dati (cicli, cursori, ecc..)
    • Cattiva strategia di indicizzazione delle tabelle, se gli indici non sono appropriati, SQL Server sarà costretto ad effettuare molte operazioni di Scan, dovrà quindi effettuare molte operazioni di I/O e cicli di CPU

    Il piano B è quello di dare più risorse alla macchina o scalare su una macchina più performante :)

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 


    lunedì 16 maggio 2016 20:56
    Moderatore
  • non ho questo informazioni essendo un server virtuale con openstack.

    Ciao Pietro,

    anche se non abbiamo informazioni sullo storage e sulla configurazione della SAN, io verificherei comunque il primo e l'ultimo punto ovvero:

    • Codice applicativo, o codice T-SQL all'interno del DB (Trigger, SP, ecc..), che elabora lentamente i dati (cicli, cursori, ecc..)
    • Cattiva strategia di indicizzazione delle tabelle, se gli indici non sono appropriati, SQL Server sarà costretto ad effettuare molte operazioni di Scan, dovrà quindi effettuare molte operazioni di I/O e cicli di CPU

    Il piano B è quello di dare più risorse alla macchina o scalare su una macchina più performante :)

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 


    Ciao

    come faccio a sapere se gli indici sono fatti bene?

    ogni tanto devo fare il rebuild perchè li ho frammentati al 99%...

    Grazie

    martedì 17 maggio 2016 07:45
  • Ciao Pietro,

    il rebuild è necessario per tenerli manutenzionati.

    Esegui la query seguente per ottenere gli indici suggeriti da SQL Server (ovviamente non devono essere creati tutti :) )

    SELECT
      database_name = DB_NAME(d.database_id)
      ,d.statement as fully_qualified_object
      ,d.equality_columns
      ,d.inequality_columns
      ,d.included_columns
      ,gs.user_seeks
      ,gs.avg_user_impact
      ,gs.last_user_seek
      ,gs.last_user_scan
      ,total_columns_to_index = (SELECT COUNT(*) FROM sys.dm_db_missing_index_columns(d.index_handle))
    FROM 
      sys.dm_db_missing_index_groups g 
    LEFT OUTER JOIN 
      sys.dm_db_missing_index_group_stats gs ON gs.group_handle = g.index_group_handle 
    LEFT OUTER JOIN 
      sys.dm_db_missing_index_details d ON g.index_handle = d.index_handle
    ORDER BY
      user_seeks DESC;
    GO

    Esegui la query seguente (di Glenn Berry) per ottenere la lista degli indici che hanno più costi di manutenzione che benefici:

    SELECT
      OBJECT_NAME(s.[object_id]) AS [Table Name]
      ,i.name AS [Index Name]
      ,i.index_id
      ,i.is_disabled
      ,i.is_hypothetical
      ,i.has_filter
      ,i.fill_factor
      ,user_updates AS [Total Writes]
      ,user_seeks + user_scans + user_lookups AS [Total Reads]
      ,user_updates - (user_seeks + user_scans + user_lookups) AS [Difference]
    FROM
      sys.dm_db_index_usage_stats AS s WITH (NOLOCK)
    INNER JOIN
      sys.indexes AS i WITH (NOLOCK) ON s.[object_id] = i.[object_id] AND i.index_id = s.index_id
    WHERE
      OBJECTPROPERTY(s.[object_id],'IsUserTable') = 1
    AND
      s.database_id = DB_ID()
    AND
      user_updates > (user_seeks + user_scans + user_lookups)
    AND
      i.index_id > 1
    ORDER BY
      [Difference] DESC
      ,[Total Writes] DESC
      ,[Total Reads] ASC OPTION (RECOMPILE);
    GO

    Posta i risultati..

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    giovedì 19 maggio 2016 22:32
    Moderatore
  • Ciao Pietro,

    il rebuild è necessario per tenerli manutenzionati.

    Esegui la query seguente per ottenere gli indici suggeriti da SQL Server (ovviamente non devono essere creati tutti :) )

    SELECT
      database_name = DB_NAME(d.database_id)
      ,d.statement as fully_qualified_object
      ,d.equality_columns
      ,d.inequality_columns
      ,d.included_columns
      ,gs.user_seeks
      ,gs.avg_user_impact
      ,gs.last_user_seek
      ,gs.last_user_scan
      ,total_columns_to_index = (SELECT COUNT(*) FROM sys.dm_db_missing_index_columns(d.index_handle))
    FROM 
      sys.dm_db_missing_index_groups g 
    LEFT OUTER JOIN 
      sys.dm_db_missing_index_group_stats gs ON gs.group_handle = g.index_group_handle 
    LEFT OUTER JOIN 
      sys.dm_db_missing_index_details d ON g.index_handle = d.index_handle
    ORDER BY
      user_seeks DESC;
    GO

    Esegui la query seguente (di Glenn Berry) per ottenere la lista degli indici che hanno più costi di manutenzione che benefici:

    SELECT
      OBJECT_NAME(s.[object_id]) AS [Table Name]
      ,i.name AS [Index Name]
      ,i.index_id
      ,i.is_disabled
      ,i.is_hypothetical
      ,i.has_filter
      ,i.fill_factor
      ,user_updates AS [Total Writes]
      ,user_seeks + user_scans + user_lookups AS [Total Reads]
      ,user_updates - (user_seeks + user_scans + user_lookups) AS [Difference]
    FROM
      sys.dm_db_index_usage_stats AS s WITH (NOLOCK)
    INNER JOIN
      sys.indexes AS i WITH (NOLOCK) ON s.[object_id] = i.[object_id] AND i.index_id = s.index_id
    WHERE
      OBJECTPROPERTY(s.[object_id],'IsUserTable') = 1
    AND
      s.database_id = DB_ID()
    AND
      user_updates > (user_seeks + user_scans + user_lookups)
    AND
      i.index_id > 1
    ORDER BY
      [Difference] DESC
      ,[Total Writes] DESC
      ,[Total Reads] ASC OPTION (RECOMPILE);
    GO

    Posta i risultati..

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    Ciao

    ecco il risultato della prima query : query1

    la seconda da query da 0 rows.

    Grazie per il tuo tempo.

    Pietro

    venerdì 20 maggio 2016 12:44
  • Ciao Pietro,

    direi di creare l'indice sulla tabella [dbo].[TotaliGiornalieriPerCards] con il seguente codice:

    USE [ALS]; GO CREATE INDEX IDX_TotaliGiornalieriPerCards_GUIDStaz_Giorno ON [dbo].[TotaliGiornalieriPerCards] ( [GUIDStazione] ,[Giorno] ) INCLUDE ( [LisciaPagamento] ,[FrizzantePagamento] ,[LisciaGratuita] ,[FrizzanteGratuita] );

    GO

    Dopo una giornata di lavoro (significativa dal punto di vista delle operazioni eseguite), ne verificherei l'effettivo utilizzo eseguendo con la query 2 sul database ALS (nel mio precedente post mi sono dimenticato di specificare che la seconda query andava eseguita sul database di cui stiamo analizzando le performance).

    Con la creazione di questo indice mi aspetto un miglioramento delle performance, mi aspetto che più di 4000 operazioni di Scan si trasformino in altrettante operazioni di Seek :)

    Riesegui anche la query 1 (sempre del mio precedente post)..

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 




    venerdì 20 maggio 2016 21:41
    Moderatore
  • Ciao Pietro,

    hai avuto modo di applicare l'indice sulla tabella dbo.TotaliGiornalieriPerCards ? Ci sono stati benefici ?

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    martedì 24 maggio 2016 13:22
    Moderatore
  • Ciao Pietro,

    hai avuto modo di applicare l'indice sulla tabella dbo.TotaliGiornalieriPerCards ? Ci sono stati benefici ?

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    Ciao Sergio,

    scusa per il ritardo, ho creato l'indice che hai richiesto. Vediamo come va questo week :)

    PS: è possibile spostare i file del DB su un altro disco?

    Grazie per il supporto.

    Buon weekend

    PP

    venerdì 27 maggio 2016 10:58
  • Ciao Pietro,

    per l'indice che abbiamo creato: OK, attendiamo tue news :) spero positive :)

    >> è possibile spostare i file del DB su un altro disco?

    Certo che è possibile, la separazione dei file di database (.mdf, .ndf e .ldf) su volumi fisici differenti è una delle best practices per aumentare le performance. Ci sono diversi modi per effettuare l'operazione, qui trovi un po' di informazioni utili:

    A Safe Method for Moving a Database to a New Location

    Moving database from one drive to another on same server

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    domenica 29 maggio 2016 15:02
    Moderatore
  • Buongiorno , la macchina virtuale gira sotto hyperview ? , hai avviato altre macchine virtuali nello stesso host ?

    hai aggiunto software all'host ?  nella macchina virtuale hai spazio disponibile su c:\ ? 

    Saluti

    lunedì 30 maggio 2016 06:54
  • Ciao Pietro,

    per l'indice che abbiamo creato: OK, attendiamo tue news :) spero positive :)

    >> è possibile spostare i file del DB su un altro disco?

    Certo che è possibile, la separazione dei file di database (.mdf, .ndf e .ldf) su volumi fisici differenti è una delle best practices per aumentare le performance. Ci sono diversi modi per effettuare l'operazione, qui trovi un po' di informazioni utili:

    A Safe Method for Moving a Database to a New Location

    Moving database from one drive to another on same server

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    Buongiorno,

    ho eseguito la qry 2 sul db ALS ma non ha restituito nessun risultato.

    Grazie per i link.

    Ciao

    PP

    lunedì 30 maggio 2016 08:14
  • Buongiorno , la macchina virtuale gira sotto hyperview ? , hai avviato altre macchine virtuali nello stesso host ?

    hai aggiunto software all'host ?  nella macchina virtuale hai spazio disponibile su c:\ ? 

    Saluti

    Ciao

    la macchina virtuale gira su openstack, presso un'azienda di hosting.

    lunedì 30 maggio 2016 08:15
  • I sistemi di virtualizzazione fanno provisioning delle risorse e in base a questo le allocano , stessa cosa per i dischi , molto probabilmente le meccaniche sono su dischi che vengono condivisi con altre macchine virtuali , i performance counter indicano che le attese si concentrano sul sistema di i/O separare i files su più dischi ovviamente ottimizza di molto , ma in ambienti virtuali non sai dove sono veramente i file , di fatto potrebbero comunque stare sullo stesso disco.

    Il mio consiglio è usare SQLIO o SQLPERF e tirare fuori i dati che hai di perfomance sullo storage , poi li verifichi se hai un agreement con quello che ti promette il fornitore del servizio e vedi se sei in linea .

    Banalmente se sulle stesse meccaniche il virtualizzatore del tuo provider ha posizionato altri applicativi o db che fanno transazionale spinto , te subisci le conseguenze , magari rispetto a prima che il sistema era più scarico, ovviamente è un ipotesi.

    Saluti

    Quirino

    lunedì 30 maggio 2016 09:01
  • Ciao

    è normale che il file database_log sia di 48G?

    venerdì 10 giugno 2016 07:29
  • Dipende , quanto è grande il db ? mediamente si consiglia che i log non crescano più della metà del database , ma dipende dalle attività che compi sul database .

    Puoi effettuare lo shrink del log , ma dovresti verificare se vengono fatte spesso operazioni che portano a crescere il log , in questo caso non conviene fare shrink perchè non farebbe che ricrescere allocando spazio e pregiudicando le performance.

    è un database OLTP ? o di Reportistica ? 

    per capire bisognerebbe avere qualche informazione in più

    Quanti VLF hai ?

    Saluti

    Quirino


    QuirinoS

    venerdì 17 giugno 2016 09:45
  • Ciao

    non so rispndere alle tue domande :D

    puoi dirmi come verificare?

    il db è di un 1Gb

    forse perchè ho il full recover?

    grazie

    venerdì 17 giugno 2016 15:36
  • Ciao Pietro,

    per quanto riguarda il Transaction Log, dai un'occhiata a questo articolo (sul sito UGISS):

    Il transaction log e’ enorme e mi da problemi. Cosa posso fare?

    IMHO, stiamo perdendo un po' il focus di questo thread :) le performance sono migliorate dopo la creazione dell'indice ? Hai avuto modo di verificare ?

    Grazie, ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    venerdì 17 giugno 2016 22:40
    Moderatore
  • Ciao Pietro,

    per quanto riguarda il Transaction Log, dai un'occhiata a questo articolo (sul sito UGISS):

    Il transaction log e’ enorme e mi da problemi. Cosa posso fare?

    IMHO, stiamo perdendo un po' il focus di questo thread :) le performance sono migliorate dopo la creazione dell'indice ? Hai avuto modo di verificare ?

    Grazie, ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    Ciao

    sembra proprio di si :)

    grazie

    lunedì 20 giugno 2016 06:59
  • Ciao Pietro,

    Bene! Bello iniziare la settimana con una buona notizia :)

    Nel caso volessi partecipare, ti segnalo un evento tutto dedicato al Performance Tuning con SQL Server, si tratta dell'evento SQL Tuning Saturday 2016!

    Ciao


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    martedì 21 giugno 2016 22:53
    Moderatore