¿Cuánto tiempo se necesita para ejecutar

ALTER DATABASE [MySite] SET READ_COMMITTED_SNAPSHOT ON

Me corrió y se toma 10 minutos.

¿Cómo puedo verificar si es de aplicación?

  • ¿alguna vez acabado?
  • voy a revisar…
  • oops. no estaba permitido todo este tiempo!! (en serio!) que explica los interbloqueos. ver mi respuesta en la parte inferior de los hallazgos y una mejor secuencia de comandos para ejecutar
  • La acción en sí misma completa casi al instante. La razón de que no regreso es porque está esperando a otros usuarios a salir de la base de datos. No se como es ocupado pensando, revolviéndose, el consumo de recursos; es la espera para todo el mundo a salir de la habitación por lo que cambiar el tirón el interruptor.
InformationsquelleAutor Simon_Weaver | 2008-10-24

8 Comentarios

  1. 65

    Usted puede comprobar el estado de la READ_COMMITTED_SNAPSHOT configuración utilizando el sys.databases vista. Compruebe el valor de la is_read_committed_snapshot_on columna. Ya le preguntó y respondió.

    Como por la duración, Libros en Línea a los estados que no puede haber ningún otro tipo de conexiones a la base de datos cuando esto tiene lugar, pero no requiere el modo de usuario único. Así que usted puede estar bloqueado por otras conexiones activas. Ejecutar sp_who (o sp_who2) para ver qué más está conectado a la base de datos.

    • gracias. su toma 40 minutos hasta el momento y está mostrando 0. su 740mb de la base de datos. dedos cruzados para que no me lo rompen
    • Intente abrir otra ventana de consulta contra la que databse. Si usted puede, a continuación, espero que su declaración no ha empezado a correr todavía.
    • Yup. Sólo debe tomar unos pocos segundos en la mayoría de las bases de datos. Si está tomando más tiempo de lo que está esperando detrás de otro (incluso los no activos) conexión a terminar antes de que se pueda hacer el cambio. Así que usted puede necesitar para encontrar y MATAR a cualquier spid está conectado actualmente (después de evaluar lo que están haciendo). LUEGO se debe ir rápidamente.
    • Recomiendo el uso de la NO_WAIT opción a fallar immedately, si hay otras conexiones abiertas. E. g. ‘ALTER DATABASE CONJUNTO genérico READ_COMMITTED_SNAPSHOT CON NO_WAIT’
    • Si usted no puede encontrar y matar a los otros conectado Spid (o no les importa) siempre puedes reiniciar la instancia de SQL Server.
    • Yo estaba siendo bloqueada por spid11, que en mi caso es el servidor de la CHECKPOINT proceso. Ejecución de sp_who mostró mi bloque, mientras que un punto de control completa.

  2. 44

    Intente esto:

    ALTER DATABASE generic SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE
    • Entonces, ¿cuál es el uso de «CON la REVERSIÓN INMEDIATA» ? eso no significa que automáticamente se deshace cuando la consulta fallado ?
    • No, «CON la REVERSIÓN INMEDIATA» significa que de inmediato va a deshacer las transacciones abiertas antes de iniciar la instrucción ALTER DATABASE. Le advierto que este a menos que usted ya ha comprobado lo que las transacciones están abiertas y si se puede de manera segura revierte.
    • Gracias! funciona muy rápido ahora.
    • Increíble, también los informes de progreso de cierre de conexiones. Guardó nuestro tocino!
  3. 28

    OK (yo soy el original interrogador) y resulta que todo este tiempo yo ni siquiera tienen la maldita cosa habilitado.

    Aquí está el último código a ejecutar para habilitar el modo de instantánea y asegúrese de que está activada.

    SELECT is_read_committed_snapshot_on, snapshot_isolation_state_desc,snapshot_isolation_state FROM sys.databases WHERE name='shipperdb'
    
    ALTER DATABASE shipperdb SET allow_snapshot_isolation ON
    ALTER DATABASE shipperdb SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    ALTER DATABASE shipperdb SET read_committed_snapshot ON
    ALTER DATABASE shipperdb SET MULTI_USER
    
    SELECT is_read_committed_snapshot_on, snapshot_isolation_state_desc,snapshot_isolation_state FROM sys.databases WHERE name='shipperdb'

    Esto funciona incluso con las conexiones activas (es de suponer que usted está bien con ellos echaron).

    Se puede ver el antes y el después de estado y este debe ejecutar casi de inmediato.


    IMPORTANTE:

    La opción READ_COMMITTED_SNAPSHOT de arriba corresponde a IsolationLevel.ReadCommitted en .NET

    La opción ALLOW_SNAPSHOT_ISOLATION de arriba corresponde a IsolationLevel.Instantánea en .NET

    Gran artículo acerca de las diferentes versiones


    .NET Consejos:

    Parece Isolationlevel.ReadCommitted es permitido en el código, incluso si no está habilitado por la base de datos. Ninguna advertencia se produce. Así que hágase un favor y asegúrese de que esté activada antes de que se supone que es para 3 años como yo lo hice!!!

    Si estás usando C#, usted probablemente querrá la ReadCommitted IsolationLevel y no Snapshot – a menos que usted está haciendo escribe en esta transacción.

    READ COMMITTED SNAPSHOT hace optimista lee y pesimista escribe. En contraste, SNAPSHOT hace optimista lee y optimista escribe. (desde aquí)

    bool snapshotEnabled = true;
    
    using (var t = new TransactionScope(TransactionScopeOption.Required,
                   new TransactionOptions
    {
         IsolationLevel = IsolationLevel.ReadCommitted
    }))
    {
         using (var shipDB = new ShipperDBDataContext())
         {
    
         }
    }

    Adicionales que usted puede obtener un error acerca de ser incapaz de promover » una transacción. Búsqueda de «promoción» en La Introducción Del Sistema.Las transacciones en el .NET Framework 2.0.

    Menos que usted está haciendo algo especial como la conexión a una base de datos externa (o segunda base de datos), a continuación, algo tan simple como la creación de un nuevo DataContext puede causar esto. Yo tenía un caché que ‘girar’ su propia datacontext en la inicialización y este estaba tratando de escalar la transacción a un total distribuida.

    La solución era simple :

            using (var tran = new TransactionScope(TransactionScopeOption.Suppress))
            {
                using (var shipDB = new ShipperDBDataContext())
                { 
                     // initialize cache
                }
            }

    Ver también Estancada artículo de @CodingHorror

    • Quería mencionar, ya que no estaba seguro: puede a su vez en READ_COMMITTED_SNAPSHOT independientemente de ALLOW_SNAPSHOT_ISOLATION. Usted puede tener ALLOW_SNAPSHOT_ISOLATION no y todavía se benefician de READ_COMMITTED_SNAPSHOT ser en. Prueba: Microsoft SQL Server 2012 – 11.0.2100.60
    • Esta opción cambia la manera de LEER COMETIDO es implementado. Con la opción off, SQL Server se utilizan bloqueos para el control de acceso. Esta es la razón por la que su .NET de código de no generar una advertencia – que seguían obteniendo el comportamiento, acaba de hacer en un diferente (y más probabilidades de interbloqueo) en el camino.
  4. 9

    Prueba este código:

    if(charindex('Microsoft SQL Server 2005',@@version) > 0)
    begin
        declare @sql varchar(8000)
        select @sql = '
        ALTER DATABASE ' + DB_NAME() + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
        ALTER DATABASE ' + DB_NAME() + ' SET READ_COMMITTED_SNAPSHOT ON;
        ALTER DATABASE ' + DB_NAME() + ' SET MULTI_USER;'
    
        Exec(@sql)
    end
    • Esto funcionó para mí. (Yo tuve el mismo problema)
    • Usted debe envolver a su db_name() llamadas con quotename(), para dar cuenta de los caracteres en el nombre de base de datos que puede ser que necesite escapar (como los espacios).
    • usted también necesita ‘SET allow_snapshot_isolation EN derecho? (véase mi respuesta)
    • El mssql docs reclamación que usted necesita para establecer permitir el aislamiento de instantánea. Pero estoy muy contento de encontrar esta respuesta en un océano de SQL server ruido.
  5. 6

    He probado el comando:

    ALTER DATABASE MyDB SET READ_COMMITTED_SNAPSHOT ON
    GO

    contra un dev caja, pero el que tomó más de 10 minutos y por eso me mató.

    Entonces encontré esto:

    https://willwarren.com/2015/10/12/sql-server-read-committed-snapshot/

    y utiliza su bloque de código en el que se tomó alrededor de la 1:26 de ejecutar):

    USE master
    GO
    
    /** 
     * Cut off live connections
     * This will roll back any open transactions after 30 seconds and
     * restricts access to the DB to logins with sysadmin, dbcreator or
     * db_owner roles
     */
    ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK AFTER 30 SECONDS
    GO
    
    -- Enable RCSI for MyDB
    ALTER DATABASE MyDB SET READ_COMMITTED_SNAPSHOT ON
    GO
    
    -- Allow connections to be established once again
    ALTER DATABASE MyDB SET MULTI_USER
    GO
    
    -- Check the status afterwards to make sure it worked
    SELECT is_read_committed_snapshot_on
    FROM sys.databases
    WHERE [name] = 'MyDB '
  6. 3

    Tratar de usar base de datos maestra antes de modificar la base de datos actual.

    USE Master
    GO
    
    ALTER DATABASE [YourDatabase] SET READ_COMMITTED_SNAPSHOT ON
    GO
  7. 0

    Intentar apagar los otros servicios de SQL, de modo que sólo el servicio de SQL server se está ejecutando.

    Mina corrió durante 5 minutos y luego me cancelado porque era obvio que no pasaba nada. Es un nuevo servidor, así que no hay otros usuarios conectados. Apagué el SQL Reporting Services y, a continuación, corrió otra vez.. tomó menos de un segundo para completar.

Dejar respuesta

Please enter your comment!
Please enter your name here