2010-05-06 11 views
5

Tenemos una tabla de historial que almacena las solicitudes y respuestas del servicio web xml. Actualmente los almacena en un campo XML, pero estamos teniendo problemas de rendimiento con insertos. Solo insertamos registros, no hay actualizaciones, seleccionamos o eliminamos. Hemos truncado la tabla y reconstruido el índice, en vano. La tabla tiene un índice agrupado principal en el campo de identidad y un valor predeterminado, GetDate(), en un campo de fecha y hora. Estamos ejecutando SQL 2005 Server, pero la base de datos está en modo de compatibilidad SQL 2000.¿Qué inserta más rápido, campo XML o campo Varchar (max)?

Si cambiamos el tipo de campo de XML a VarChar (max) o VarChar (xxx), ¿esto aceleraría las inserciones? ¿Hay algo más que deberíamos mirar?

Gracias.

+0

¿Ni siquiera sabía que podía usar un tipo de datos XML en una base de datos en modo de compatibilidad con SQL Server 2000? – Tomalak

Respuesta

3

varchar es más rápido - no requiere análisis. El tipo de datos XML hace un levantamiento interno bastante pesado.

+1

Por otro lado, el almacenamiento de un documento XML en una columna XML produce menos espacio utilizado: XML está optimizado para el almacenamiento. –

+1

Lo cual, sin embargo, no era la pregunta;) – TomTom

6

Depende del problema de rendimiento.

  • Si está vinculado a la CPU, la validación XML podría ser un factor y varchar (max) podría ser más rápido.
  • Si está vinculado a IO, el almacenamiento comprimido XML es mejor que el formato suelto nvarchar (máximo) y se perdería el rendimiento.
  • Por otro lado, si los fragmentos problema XML son pequeñas el almacenamiento varchar presenta la oportunidad para el almacenamiento en fila y puede apostar mejor que XML
  • Por otro lado, el de filas de almacenamiento disminuiría la fila páginas hoja densidad y causa problemas de rendimiento para lecturas.
  • Si el problema no es CPU ni IO sino que es una contención de bloqueo, entonces el problema XML vs. varchar es ortogonal al problema de rendimiento. Lo mismo ocurre con el problema de contención de bloqueo de página de punto caliente de inserción. Y de nuevo, lo mismo ocurre con el problema de rendimiento de limpieza de registros. Todos se manifestarían como 'inserciones lentas' (para alguna definición de lento) y ninguno cambiaría en lo más mínimo reemplazando un XML con varchar.

Por lo tanto, como con todos los problemas de rendimiento, la recomendación es medir primero y cortar después. El enfoque recomendado es aplicar una metodología de investigación de rendimiento comprobada y probada, como Waits and Queues. Adivinar te llevará a ninguna parte rápido.

+0

¡Gracias por la respuesta completa! Esto es lo que sé: no CPU, IO es una consideración, los fragmentos XML son pequeños, no se lee por lo que no hay problemas de lectura, bloqueo, contención de cierre, no hay problema de enrutamiento de registro. Afortunadamente, este es un registro "agradable de tener", por lo que lo desactivamos y lo abordaremos fuera de línea en QA, donde podemos supervisarlo y probarlo. – Jim

Cuestiones relacionadas