Abbiamo raggiunto il muro in SQL Server 2008 sul numero massimo di attributi che un singolo nodo XML può avere prima che il parser XML si blocchi.Errore SQL Server 2008 - Analisi XML: l'analisi del documento richiedeva troppa memoria
L'errore che stiamo ricevendo è:
Msg 6303, Level 16, State 1, Line 1
XML parsing: Document parsing required too much memory
Che è un po 'fuorviante. Il problema si verifica quando si converte una stringa in un tipo di dati XML (o colonna di una tabella).
SELECT CONVERT(XML, '<DataNode><Data attr1="a" attr2="b" XXXXX /></DataNode>')
Dove XXXXX è in realtà un altro 8191 attributi.
In totale, il nostro set di dati conteneva 10.066 attributi per iniziare. Quando riduciamo il numero di attributi a 8.192, funziona perfettamente. Tuttavia, 8.193 attributi si blocca.
Non sembra avere nulla di specifico a che fare con la dimensione dei dati (100 MB o 60 KB non importa - si ottiene lo stesso fail/successo in base al numero di attributo)
Quindi, è c'è qualcosa che può essere fatto con il server SQL per modificare questa limitazione?
La nostra applicazione C# non presenta questa limitazione, pertanto i documenti XML perfettamente validi in C# non possono essere archiviati nelle colonne di dati XML del server SQL.
Qualsiasi aiuto chiunque possa offrire sarebbe molto apprezzato. La struttura dei dati non può essere modificata a questo punto in quanto richiederebbe una riscrittura della funzionalità di elaborazione dei dati di un intero framework applicativo con centinaia di componenti.
PS: Ho già avvisato la gestione di quanto sia ridicola la situazione è quando un applicazione memorizza i dati come attributi di un singolo nodo, piuttosto che come un albero, ma questo è quello che ho da lavorare con :-(
modificare: abbiamo provato questo su SQL Server 2008 a 32 e 64 bit su un server con 2 GB di RAM e un server con 32 GB di RAM - tutte le versioni e gli ambienti hanno lo stesso problema
UPDATE:.
Ho un trie d questo in SQL Server 2012, e fallisce quando ci sono 8.193 attributi E la lunghezza della stringa è anche su una determinata dimensione (la lunghezza della stringa di test è 833K), ma funziona quando la stessa stringa di lunghezza ha solo 8.192 attributi.
Tuttavia ho una stringa molto più breve (193K) con 12.000 attributi e funziona in SQL Server 2012 e SQL Server 2008)
Così, sembra essere una combinazione del numero di attributi quando la stringa il cast è di una certa dimensione. Questo diventa più interessante!
Grazie per il feedback finora!
Aggiornamento 2:
Dopo ulteriori test con le stringhe più piccole (270K) ho ancora raggiunto il limite di attributo a 16.384 ... 16.385 attributi non riesce! Quindi, sta sicuramente accadendo in incrementi di 8K attributi, a seconda della combinazione di lunghezza della stringa !!
Potrebbe tornare solo un varchar (max) per l'applicazione # C e lasciare che l'applicazione convertirlo in formato XML corretto? – Tim
Sfortunatamente il problema non è con C#, stiamo cercando di inserire l'XML in una colonna XML nel server SQL e ottenere questo errore a causa del numero di attributi che sta tentando di gestire. C# non sembra avere questo limite di 8.192 attributi che l'analisi XML di SQL Server ha. – doublehelix
Ah - ho frainteso. Scusa :( – Tim