2013-02-06 13 views
5

Alcuni background: ho riscontrato questa eccezione di memoria all'interno di SSMS 2012 da quando è stato rilasciato accoppiato con SQLPrompt di Red Gate (questa eccezione non si verifica mai nel mio SSMS 2008R2 sullo stesso laptop).SSMS 2012 System.OutOfMemoryException (lato client) e SQL Prompt (informazioni di debug incl)

Originariamente stavo incontrando queste eccezioni quotidianamente (SSMS2012 e SQLPrompt) che mi costringe a chiudere e riaprire SSMS (insieme a tutto ciò su cui stavo lavorando). Mesi fa mi sono imbattuto in un thread di supporto che indicava possibili componenti aggiuntivi come causa, quindi ho disinstallato il mio unico componente aggiuntivo (SQL Prompt, ma non ho disinstallato il resto del pacchetto dello sviluppatore) e sono andato molti mesi senza una sola eccezione molto meno l'eccezione System.OutOfMemoryException.

Una volta SP1 è stato rilasciato per il 2012 ho applicato e reinstallato SQL Prompt di nuovo (la versione più recente) per vedere se forse la questione era stata affrontata ed entro 7 ore di tempo di sviluppo sono stato accolto ancora una volta con lo System.OutOfMemoryException infame.

Attraverso tutto questo ho aperto i ticket con Red Gate e inoltro i registri di debug in cui visualizzano l'eccezione, ma poiché l'eccezione di memoria non elenca esplicitamente SQLPrompt non aumenteranno il problema al team di sviluppo. Prima di questa specifica eccezione, SQL Prompt tuttavia lancia numerose eccezioni (alcune elencate di seguito) all'interno dell'SSE 2012 di SSMS (Visual Studio 2010). Credo che l'eccezione di memoria sia sintomatica di un problema con il modo in cui SQL Prompt gestisce i dati memorizzati nella cache e mangia la memoria disponibile per SSMS che alla fine genera un'eccezione.

ho imparare a rinviare questo problema e come riprodurlo ed è direttamente collegata a due variabili:

  1. Collegamento e lavorando su più istanze di SQL Server Management Studio (Esplora oggetti e query finestre). Cioè Collegato a 7 istanze ha compensato l'eccezione entro 2-3 ore.
  2. Restituzione di set di risultati da più istanze. Ciò include le query utilizzate da SSMS per restituire informazioni all'IDE e i risultati restituiti alle singole finestre di query.

Più istanze sono connesse al fast l'eccezione viene sollevata che mi porta nella cache di SQL Prompt tutte le informazioni dell'oggetto per istanze. Una volta sollevata l'eccezione di memoria, la situazione degrada fino a quando SSMS non si arresta completamente (a meno che non lo chiuda prima).

Quello che sto cercando è come raccogliere più/informazioni migliori da inviare a Red Gate per correggere questo problema. Questo è dove ho bisogno del tuo aiuto.

portatile: HP Elite libro 8440 RAM: 6GB

OS attuale: Win 7 Enterprise Ed Sp1

Ecco alcune delle eccezioni causate da SQL Prompt:

System.ArgumentOutOfRangeException "Specified argument was out of the range of valid values." 

Microsoft.VisualStudio.Text.Implementation.BinaryStringRebuilder.GetLineNumberFromPosition(N/A,N/A) 
Microsoft.VisualStudio.Text.Implementation.TextSnapshot.GetLineFromPosition(Microsoft.VisualStudio.Text.Implementation.TextSnapshot,N/A) 
Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.GetLineIndexOfPosition(N/A,System.Int32,System.Int32&,System.Int32&) 
RedGate.SQLPrompt.CommonVS.Editor.VSScriptProvider.PositionFromIndex(RedGate.SQLPrompt.CommonVS.Editor.VSScriptProvider,System.Int32) 
RedGate.SqlPrompt.Metadata.Script.ScriptProviderBase.GetText(RedGate.SQLPrompt.CommonVS.Editor.VSScriptProvider,System.Int32,System.Int32) 
RedGate.SqlPrompt.Engine.NewEngine.SqlPromptEngine.GetCandidates(RedGate.SqlPrompt.Engine.NewEngine.SqlPromptEngine,System.Int32) 
RedGate.SqlPrompt.Engine.PromptEngineEmulator.get_GetSuggestions(RedGate.SqlPrompt.Engine.PromptEngineEmulator) 
RedGate.SqlPrompt.Engine.AutoCompleter.m_FilterChanged(RedGate.SqlPrompt.Engine.AutoCompleter,RedGate.SqlPrompt.Engine.PromptEngineEmulator,System.EventArgs) 
RedGate.SqlPrompt.Engine.PromptEngineEmulator.OnFilterChanged(RedGate.SqlPrompt.Engine.PromptEngineEmulator) 
RedGate.SqlPrompt.Engine.PromptEngineEmulator.set_Index(RedGate.SqlPrompt.Engine.PromptEngineEmulator,System.Int32) 
RedGate.SqlPrompt.Engine.PromptEngineEmulator.set_CaretPosition(RedGate.SqlPrompt.Engine.PromptEngineEmulator,N/A) 
RedGate.SQLPrompt.CommonUI.Editor.EditorWindowBase.SetEngineCaretPosition(RedGate.SQLPrompt.SSMSUI.SSMSEditorWindow,N/A) 
RedGate.SQLPrompt.CommonUI.Editor.EditorWindowBase.UpdateUIPrompts(RedGate.SQLPrompt.SSMSUI.SSMSEditorWindow) 
RedGate.SQLPrompt.CommonVS.Editor.VSEditorWindow.OnTextViewCommandExec(RedGate.SQLPrompt.SSMSUI.SSMSEditorWindow,RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor,RedGate.SQLPrompt.CommonVS.Editor.CommandExecEventArgs) 
RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor.AfterCommandExecute(RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor,RedGate.SQLPrompt.CommonVS.Editor.CommandExecEventArgs) 
RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor..(RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor.) 
RedGate.SQLPrompt.CommonUI.Utils.ErrorDialog.Do(System.Action) 
RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor.(RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor,System.Guid&,System.Uint32,System.Uint32,System.IntPtr,System.IntPtr) 
RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor..(RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor.,System.Guid&,System.Uint32,System.Uint32,System.IntPtr,System.IntPtr) 
Microsoft.VisualStudio.Editor.Implementation.CommandChainNode.Exec(N/A,N/A,N/A,N/A,N/A,N/A) 

System.ArgumentException 00:05:14.7510000 "The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))" 

#mMc.#JQub.#OQub(#mMc.#JQub,N/A,System.Uint32,#mMc.#k3ub&) 
#mMc.#JQub.#z26.#8Di(#mMc.#JQub.#z26) 
RedGate.SQLSourceControl.Engine.SmartAssembly.ExceptionReporting.ErrorReporterBase.Do(RedGate.SQLSourceControl.CommonUI.Forms.ErrorDialog,System.Action,System.Predicate`1<System.Exception>,System.Boolean) 
RedGate.SQLSourceControl.Engine.SmartAssembly.ExceptionReporting.ErrorReporterBase.Do(RedGate.SQLSourceControl.CommonUI.Forms.ErrorDialog,System.Action) 
RedGate.SQLSourceControl.CommonUI.Forms.ErrorDialog.Do(System.Action) 

E qui è l'eccezione di memoria:

Exception thrown in result set

System.OutOfMemoryException <null> 

System.Text.StringBuilder.set_Capacity(System.Text.StringBuilder,N/A) 
Microsoft.SqlServer.Management.QueryExecution.QEDiskStorageView.set_MaxNumBytesToDisplay(N/A,N/A) 
Microsoft.SqlServer.Management.QueryExecution.QEDiskDataStorage.GetStorageView(N/A) 
Microsoft.SqlServer.Management.QueryExecution.QEResultSet.StartRetrievingData(Microsoft.SqlServer.Management.QueryExecution.QEResultSet,System.Int32,N/A) 
Microsoft.SqlServer.Management.QueryExecution.ResultSetAndGridContainer.StartRetrievingData(N/A,N/A,N/A) 
Microsoft.SqlServer.Management.QueryExecution.ResultsToGridBatchConsumer.OnNewResultSet(Microsoft.SqlServer.Management.QueryExecution.ResultsToGridBatchConsumer,N/A,N/A) 
Microsoft.SqlServer.Management.QueryExecution.QESQLBatch.ProcessResultSet(Microsoft.SqlServer.Management.QueryExecution.QESQLBatch,N/A) 
Microsoft.SqlServer.Management.QueryExecution.QESQLBatch.DoBatchExecution(Microsoft.SqlServer.Management.QueryExecution.QESQLBatch,System.Data.SqlClient.SqlConnection,N/A) 
Microsoft.SqlServer.Management.QueryExecution.QESQLBatch.Execute(N/A,N/A,N/A) 
Microsoft.SqlServer.Management.QueryExecution.QEOLESQLExec.DoBatchExecution(Microsoft.SqlServer.Management.QueryExecution.QEOLESQLExec,Microsoft.SqlServer.Management.QueryExecution.QESQLBatch) 
Microsoft.SqlServer.Management.QueryExecution.QESQLExec.ExecuteBatchCommon(Microsoft.SqlServer.Management.QueryExecution.QEOLESQLExec,N/A,N/A,System.Boolean&) 
Microsoft.SqlServer.Management.QueryExecution.QEOLESQLExec.ExecuteBatchHelper(N/A,N/A,N/A,N/A) 
Microsoft.SqlServer.Management.QueryExecution.QEOLESQLExec.ProcessBatch(N/A,N/A,N/A) 
.BatchParser.ThunkCommandExecuter.ProcessBatch(N/A,N/A,N/A) 

Anche in questo caso, per essere chiari, non so se le altre eccezioni riguardano o no, ma l'eccezione di memoria solo succede con SQL Prompt installato.

Grazie per l'assistenza!

+0

Potrebbe essere più adatto ai [forum RedGate] (http://www.red-gate.com/messageboard/index.php) – Andomar

+1

Per me questo forum è un super-set del forum Red Gate quindi io ' d avere una migliore possibilità di ottenere un aiuto avanzato qui. Inoltre, ho avuto a che fare con il supporto di Red Gate per molti mesi senza risoluzione. – artofsql

+0

Poiché l'utilizzo del SSMS 2012 accoppiato con SQLPrompt di Redgate si sta diffondendo nel reparto, questa è l'eccezione. Uno sviluppatore DB peer che ha appena passato a utilizzare SSMS 2012 con SQLPrompt si sta arrestando in modo anomalo. – artofsql

risposta

-1

Puoi provare a limitare il numero di colonne come descritto in questo post e vedere se aiuta? http://redgate.uservoice.com/forums/94413-sql-prompt-feature-suggestions/suggestions/1364757-disable-sql-prompt-on-certain-databases

+0

Ho provato a limitare e disabilitare la memorizzazione nella cache in passato, ma le eccezioni non si sono interrotte. – artofsql

+0

Un altro problema con questo suggerimento è che non so mai su quali database e server dovrei lavorare per far sì che funzioni correttamente. Dovrei gestire questa impostazione costantemente. Per uno strumento venduto uno strumento di database professionale non riesce a essere all'altezza di quello utilizzato da un vero professionista del database quando si blocca costantemente SSMS. – artofsql

0

Ciò che funziona per me è Disabilitare i suggerimenti di codice nel prompt SQL, quindi posso eseguire la stessa query e ottenere i risultati. Posso quindi abilitare i suggerimenti di codice nel prompt di SQL e l'errore rimane via per un po '.

0

A questo punto, RedGate ha finalmente ammesso che il plug-in SQL Prompt sta funzionando in-process con il client SSMS a 32 bit e alla fine soffoca la memoria risultante nell'eccezione out-of-memory.

La loro risposta a una soluzione per questo sarebbe "forse" in un anno o giù di lì che, quando si paga per il supporto annuale, è uno schiaffo in faccia. Da allora mi sono rifiutato di pagare per un ulteriore supporto per 2 licenze Tool-belt esistenti su questo problema, un problema con il quale ho combattuto dal 2012, fino a quando non lo correggono. Se questo ti interessa, allora, se puoi, fai lo stesso e vota con il tuo portafoglio per motivarli a fare di questa correzione una priorità più alta.

Se e quando verrà quel giorno aggiornerò questo post di risposta con le informazioni sulla versione della build corretta di SQL Prompt che non funziona più nello spazio di memoria a 32 bit di SSMS.exe.