Oracle VS SQL Server

Category: Performance and Tunning 9 years ago
Hola, quisiera comentar algo que me tiene un poco confundido sobre el performance entre Oracle y SQL Server. Resulta que he estado realizando pruebas entre los dos y por alguna razón siempre me da muchísimo mejor performance SQL Server que Oracle, por ejemplo dentro de un loop inserto 2 millones de registros, entre cada insert realizo un commit, pues en SQL Server me da 3 mil inserts por segundo y oracle 1,500 inserts por segundo, ahora si realizo los mismos inserts pero después de cada 100 realizo un commit sql server me da 75 mil por segundo y oracle no logra pasar de 2 mil por segundo. Les comento que el SQL Server esta sobre un servidor con raid 10 formado por 6 discos y el log de transacciones separado con otro raid 10 con 4 discos y tiene 8 procesadores. Oracle esta formado por dos nodos en RAC y cada equipo cuenta con 24 procesadores, 64 GB de RAM y están sobre una san donde la lun de los datos son raid 10 con 6 discos y los online redo logs sobre otra lun formada por raid 10 con 4 discos. Según yo por hardware deberían más o menos dar lo mismo. Algunos de ustedes ha presentado el mismo problema al comparar el performance entre Oracle y SQL Server?

También me he dado cuenta que desde un cliente como Toad o SQL Developer de oracle la conexión siempre es mas lenta, ejecutar un script es lentísimo, en cambio desde SQL Server ejecutarlo desde su cliente es rapidísimo.

Ahora comento que he trabajado en dos compañías diferentes con Oracle y SQL Server y en las dos siempre he tenido estas diferencias.

Saludos
Like it on Facebook, +1 on Google, Tweet it or share this topic on other bookmarking websites.
  • Re: Oracle VS SQL Server

    by » 9 years ago


    Me falto comentar que las versiones:

    Oracle 10G R2
    SQL Server 2005 SP2

  • Re: Oracle VS SQL Server

    by » 9 years ago


    Buenas tardes!

    Hay mucha diferencia, algo no se está comparando correctamente, creo yo. Por ejemplo, ¿en el momento de estar haciendo los inserts, cuál es el periodo de tiempo que transcurre entre log switches?. ¿Está en modo archive la BD?. La de SQL Server está en modo simple o full?

    Mi opinión es que Oracle es mucho más "tuneable" que SQL Server. Por ejemplo, esos inserts están haciéndose en una BBDD en modo Dedicated o en modo Shared. Yo creo que con varios dispatchers, revisando que los circuitos no estén muy cargados y demás, atendiendo estas peticiones tan cortas pero continuas, sería bastante más rápido.

    Ojo, también en si estás comparando resultados en un select... porque puede que SQL Server a veces dé la impresión de arrojar resultados más rápido, pero habría que revisar en modo está el optimizer_goal de la sesión de Oracle.... first_rows, all... etc etc.

    A todo esto, me parece que ya han hecho pruebas de este tipo (inserts masivos) y el ganador fue MySQL, luego SQL Server y en tercero Oracle. Sin embargo, se explicó que Oracle hace más comprobaciones internas al momento de las operaciones, que los demás rdbms.

    Salu2!!
    Carlos I. Contreras

    DBASupport Team

  • Re: Oracle VS SQL Server

    by » 9 years ago


    El modo de mi bd es en archivelog y en sql server en modo full.

    Este es el escript que ejecuto.

    [quote]SQL Server
    CREATE TABLE [dbo].[DEMO](
    [HORA] [datetime] NULL,
    [SECUENCIA] [int] NULL,
    [DATOS] [varchar](222) NULL,
    [ENLACE] [varchar](20) NULL
    ) ON [PRIMARY]

    GO

    begin tran
    go
    DECLARE @cMensaje char(222);
    DECLARE @contador int;
    DECLARE @i int;
    set @i=1;
    set @contador=1;

    WHILE @i < 500000
    BEGIN
    set @i = @i+1
    set @contador = 1+@contador;
    set @cMensaje = ('012008032507054400O012008032507054400O012008032507054400O012008032507054400O0120080
    32507054400O012008032507054400O012008032507054400O012008032507054400O');
    insert into DEMO values (getdate(),1,@cMensaje,'ENLACE1');
    if(0 = cast(@contador as int) % 100)
    BEGIN
    --PRINT 'Commit tran batch '+ convert(varchar(10),@contador)
    COMMIT TRAN
    BEGIN TRAN
    END

    END
    go
    commit tran
    go;


    select count(*)/(
    (datepart(hh,max(hora))-datepart(hh,min(hora)))*3600 +
    (datepart(mi,max(hora))-datepart(mi,min(hora)))*60 +
    (datepart(ss,max(hora))-datepart(ss,min(hora))) )
    from DEMO (nolock)

    ORACLE

    CREATE TABLE "DEMO"
    (
    "HORA" TIMESTAMP (6),
    "SECUENCIA" NUMBER(7,0),
    "DATOS" VARCHAR2(222 CHAR),
    "ENLACE" VARCHAR2(20 CHAR)
    );


    DECLARE
    cMensaje char(222);
    contador integer;

    BEGIN
    contador := 1;
    cMensaje := '012008032507054400O012008032507054400O012008032507054400O012008032507054400O0120080
    32507054400O012008032507054400O012008032507054400O012008032507054400O';
    for i in 1..1000000
    LOOP
    contador := contador +1;
    insert into DEMO values(systimestamp,1,cMensaje,'ENLACE1');
    if contador > 100 then
    commit;
    contador := 1;
    end if;
    END LOOP;
    --commit;
    END;


    SELECT COUNT(*)/((extract(hour from MAX(HORA))-extract(hour from MIN(HORA)))*3600 +
    (extract(minute from MAX(HORA))-extract(minute from MIN(HORA)))*60 +
    (extract(second from MAX(HORA))-extract(second from MIN(HORA)))) "Tran/seg" from DEMO;[/quote]


    Haber si alguien de ustedes puede hacer la misma prueba si tienen estas dos bases de datos y decirme sus resultados.

    Gracias

  • Re: Oracle VS SQL Server

    by » 9 years ago


    Y el tiempo entre log switches??

    DBASupport Team

  • Re: Oracle VS SQL Server

    by » 9 years ago


    sequence start_time end_time minutes rec_id thread
    579 27-may-11 07:05:34 27-may-11 07:05:39 0.09 27286 1
    578 27-may-11 07:05:28 27-may-11 07:05:34 0.1 27285 1
    577 27-may-11 07:05:23 27-may-11 07:05:28 0.09 27284 1
    576 27-may-11 07:05:18 27-may-11 07:05:23 0.09 27283 1
    575 27-may-11 07:05:25 27-may-11 07:05:18 0.92 27282 1
    574 27-may-11 07:05:19 27-may-11 07:05:25 0.1 27281 1

You do not have permissions to reply to this topic.
Powered by CjForum