Foro oficial de SQL

latxor

Lanero Reconocido
Lanero VIP
18 Jul 2006
4,841
Buenas tengo una duda y ojala alguien me pueda ayudar a buscarle una solución, la situación es la siguiente:

Tenemos una BD sql server 2008 que esta recibiendo al rededor de 200k(varias tablas escribiendo cada 250 milisegundos) registros por hora mas o menos, nosotros tenemos configurado que cuando allá una inserción en la bd este notifique a la aplicación web y esta desde allá le hace una consulta a la base de datos que es tráeme el ultimo registro insertado, el gran problema se presenta es cuando ya hay mas de 5 millones de registro por tablas allí se empieza a poner lenta la aplicación. No tengo mucho conocimiento de administración de base de datos y por eso pregunto sino hay alguna forma de optimizar la bd como una cache o algo así que pueda consultar y no hacerlo directamente a la tabla?

Gracias.
 

––•(ByAlaN)•––

Lanero Reconocido
8 Ene 2004
6,898
Buenas tengo una duda y ojala alguien me pueda ayudar a buscarle una solución, la situación es la siguiente:

Tenemos una BD sql server 2008 que esta recibiendo al rededor de 200k(varias tablas escribiendo cada 250 milisegundos) registros por hora mas o menos, nosotros tenemos configurado que cuando allá una inserción en la bd este notifique a la aplicación web y esta desde allá le hace una consulta a la base de datos que es tráeme el ultimo registro insertado, el gran problema se presenta es cuando ya hay mas de 5 millones de registro por tablas allí se empieza a poner lenta la aplicación. No tengo mucho conocimiento de administración de base de datos y por eso pregunto sino hay alguna forma de optimizar la bd como una cache o algo así que pueda consultar y no hacerlo directamente a la tabla?

Gracias.

Hola.

Revise los indices de la tabla, si el query que notifica la webapp esta haciendo buen uso de los indices no deberia tener problemas ;).

SuerteX :)
 

latxor

Lanero Reconocido
Lanero VIP
18 Jul 2006
4,841
Hola.

Revise los indices de la tabla, si el query que notifica la webapp esta haciendo buen uso de los indices no deberia tener problemas ;).

SuerteX :)

El problema es que el indice lo tiene por Id y esta en forma Ascendente, claro al buscar el ultimo registro ya entenderás que se demora años para traerlo, alguna forma de optimizar esto ya que el que me entrega la bd no tiene NPI de eso y prácticamente nos va a tocar a nosotros optimizar esas tablas sin nosotros tener idea de administración de base de datos.

Nuestra tabla esta configurada de la siguiente manera, la gran mayoría int y floats y la tabla es heap osea no las entregan como la hace por defecto.

Id(int)
EstaProcesado (Booleano)
TemperaturaAmbiente
MotorTemperatura
MotorVelocidad
MotorVoltaje
MotorRevolucion
Gasolina
PresionLlantaDelanteraDerecha
PresionLlantaDelanteraIzquierda
PresionLlantaTraseraDerecha
PresionLlantaTraseraIzquierda
NivelSeñalGprs
NivelBateriaGprs

Sí me puedes ayudar así sea con consejos y yo empaparme del tema te lo agradecería mucho.
 

––•(ByAlaN)•––

Lanero Reconocido
8 Ene 2004
6,898
El problema es que el indice lo tiene por Id y esta en forma Ascendente, claro al buscar el ultimo registro ya entenderás que se demora años para traerlo, alguna forma de optimizar esto ya que el que me entrega la bd no tiene NPI de eso y prácticamente nos va a tocar a nosotros optimizar esas tablas sin nosotros tener idea de administración de base de datos.

Nuestra tabla esta configurada de la siguiente manera, la gran mayoría int y floats y la tabla es heap osea no las entregan como la hace por defecto.

Id(int)
EstaProcesado (Booleano)
TemperaturaAmbiente
MotorTemperatura
MotorVelocidad
MotorVoltaje
MotorRevolucion
Gasolina
PresionLlantaDelanteraDerecha
PresionLlantaDelanteraIzquierda
PresionLlantaTraseraDerecha
PresionLlantaTraseraIzquierda
NivelSeñalGprs
NivelBateriaGprs

Sí me puedes ayudar así sea con consejos y yo empaparme del tema te lo agradecería mucho.

Hola.

Revise bien la configuracion de la DB, HW y verifique bien los indices, ademas como estan repartidos los archivos de la DB, ya que donde trabajo tenemos una DB que una sola de las tablas tiene 43,703,603 (y creciendo) y funciona de maravilla.... regularmente en horarios de trabajo recibe cargas masivas de datos y consultas constantes.

Saludos.
 

MædCo

@MaEdCo
12 May 2007
8,858
Hola, perdón estoy algo olvidado de SQL :D, pregunta rápida como uno o defino un campo calculado en SQL Server 2012?

es decir:

tengo una tabla que se llama Responsabilidades

CREATE TABLE [dbo].[tabla_responsabilidades] (
[Id_Actividad] INT IDENTITY (1, 1) NOT NULL,
[Id_Contratista] NVARCHAR (10) NOT NULL,
[Id_Resp_Contratista] NVARCHAR (50) NOT NULL,
[Des_Resp] NVARCHAR (MAX) NOT NULL,
[Cod_Resp] NVARCHAR (MAX) NOT NULL
.....

cómo hago para que [Cod_Resp] sea igual a [Id_Actividad] + R + [Id_Contratista]

asi?
[Cod_Resp] as [Id_Actividad] + 'R' + [Id_Contratista] ???

gracias
 

Likibuay

Lanero Reconocido
1 Sep 2004
3,665
Hola, perdón estoy algo olvidado de SQL :D, pregunta rápida como uno o defino un campo calculado en SQL Server 2012?

es decir:

tengo una tabla que se llama Responsabilidades

CREATE TABLE [dbo].[tabla_responsabilidades] (
[Id_Actividad] INT IDENTITY (1, 1) NOT NULL,
[Id_Contratista] NVARCHAR (10) NOT NULL,
[Id_Resp_Contratista] NVARCHAR (50) NOT NULL,
[Des_Resp] NVARCHAR (MAX) NOT NULL,
[Cod_Resp] NVARCHAR (MAX) NOT NULL
.....

cómo hago para que [Cod_Resp] sea igual a [Id_Actividad] + R + [Id_Contratista]

asi?
[Cod_Resp] as [Id_Actividad] + 'R' + [Id_Contratista] ???

gracias

http://msdn.microsoft.com/es-es/library/ms188300.aspx

CREATE TABLE dbo.Products
(
ProductID int IDENTITY (1,1) NOT NULL
, QtyAvailable smallint
, UnitPrice money
, InventoryValue AS QtyAvailable * UnitPrice
);

-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
VALUES (25, 2.00), (10, 1.5);

-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;
 

MædCo

@MaEdCo
12 May 2007
8,858
http://msdn.microsoft.com/es-es/library/ms188300.aspx

CREATE TABLE dbo.Products
(
ProductID int IDENTITY (1,1) NOT NULL
, QtyAvailable smallint
, UnitPrice money
, InventoryValue AS QtyAvailable * UnitPrice
);

-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
VALUES (25, 2.00), (10, 1.5);

-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;
Gracias ahi multiplica, quiero concatenar, ahora que llegue a mi casa leo con mas cuidado el articulo que me dejas[emoji106]
 

MædCo

@MaEdCo
12 May 2007
8,858
Acabo de probar en Computed Column Specification en Formula

[Id_Actividad] + 'R' + [Id_Contratista]
y

Id_Actividad +'R' + Id_Contratista

y no funciona, como se concatena en SQL? gracias


EDIT: ya pude ;)
 
Última edición:

––•(ByAlaN)•––

Lanero Reconocido
8 Ene 2004
6,898
Hola.

Un aporte, en caso de que quiera calcular datos, le recomiendo que use la instruccion COMPUTED+PERSISTED:

PHP:
CREATE TABLE dbo.Products
(
    ProductID int IDENTITY (1,1) NOT NULL
  , QtyAvailable smallint
  , UnitPrice money
  , InventoryValue AS QtyAvailable * UnitPrice PERSISTED
);

La ventaja de PERSISTED es que almacena el campo calculado, y no calcula cada vez que realice la consulta.

PD: http://www.mssqltips.com/sqlservert...-columns-in-sql-server-with-persisted-values/

Saludos ;)
 
Última edición:
  • Me gusta
Reacciones: Likibuay

MædCo

@MaEdCo
12 May 2007
8,858
hola alguien me puede colaborar? pasar de SQL a LINQ?

Código:
select * from dbo.AspNetUsers
where Cargo='Coordinador'
and Id not in (select Id_Coordinador from dbo.tblEquiposTrabajo)

eso a LINQ?
 

Ivanzinho

Lanero Reconocido
28 Sep 2004
1,655
hola alguien me puede colaborar? pasar de SQL a LINQ?

Código:
select * from dbo.AspNetUsers
where Cargo='Coordinador'
and Id not in (select Id_Coordinador from dbo.tblEquiposTrabajo)

eso a LINQ?
Hermano, si gusta, si es de su apetencia mejor mande los datos ya filtrados desde SQL o tratelos como un arreglo y haga bucles FOR o FOREACH anidados para ir filtrando los datos en memoria; LINQ es demasiado lento y no le permite modificar en tiempo de ejecucion los metodos donde están presentes (generalmente las implementaciones de LINQ terminan siendo un desastre, overhead para la memoria RAM y procesador, etc...).
 

Migue.Perez

Lanero Reconocido
14 May 2007
491
hola, alguien sera que me puede ayudar, no es sql pero de pronto algún dba que me de una luz, tengo windows 2008 r2 standar, en este tengo montado una motor sql sever 2008 r2, el domingo pasado hubo un corte de energia de mas de 5 horas entonces la ups murio y el servidor callo, desde el lunes que encendí el motor y el servidor en general esta extremadamente lento, que podría ser o que podría hacer para mejorar esto. Gracias. ->
Pd. Esas cosas son las que me enputan de microsoft.
 

MædCo

@MaEdCo
12 May 2007
8,858
Hermano, si gusta, si es de su apetencia mejor mande los datos ya filtrados desde SQL o tratelos como un arreglo y haga bucles FOR o FOREACH anidados para ir filtrando los datos en memoria; LINQ es demasiado lento y no le permite modificar en tiempo de ejecucion los metodos donde están presentes (generalmente las implementaciones de LINQ terminan siendo un desastre, overhead para la memoria RAM y procesador, etc...).


gracias, pero ya me colaboraron el otro foro, la linea que necesitaba era esta:

Código:
 List<AspNetUser> coordinadoressincargo = (from u in db.AspNetUsers
                                                     where u.Cargo.Equals("Coordinador")
                                                     && !(from te in db.tblEquiposTrabajo select te.Id_Coordinador).Contains(u.Id)
                                                     select u).ToList();
 

––•(ByAlaN)•––

Lanero Reconocido
8 Ene 2004
6,898
Hermano, si gusta, si es de su apetencia mejor mande los datos ya filtrados desde SQL o tratelos como un arreglo y haga bucles FOR o FOREACH anidados para ir filtrando los datos en memoria; LINQ es demasiado lento y no le permite modificar en tiempo de ejecucion los metodos donde están presentes (generalmente las implementaciones de LINQ terminan siendo un desastre, overhead para la memoria RAM y procesador, etc...).

Raro... tengo rato trabajando con ellos y nunca he visto un problema parecido :S.

hola, alguien sera que me puede ayudar, no es sql pero de pronto algún dba que me de una luz, tengo windows 2008 r2 standar, en este tengo montado una motor sql sever 2008 r2, el domingo pasado hubo un corte de energia de mas de 5 horas entonces la ups murio y el servidor callo, desde el lunes que encendí el motor y el servidor en general esta extremadamente lento, que podría ser o que podría hacer para mejorar esto. Gracias. ->
Pd. Esas cosas son las que me enputan de microsoft.

Antes que el SQL Server revise el Servidor, los event log le peuden dar luz ;).

gracias, pero ya me colaboraron el otro foro, la linea que necesitaba era esta:

Código:
 List<AspNetUser> coordinadoressincargo = (from u in db.AspNetUsers
                                                     where u.Cargo.Equals("Coordinador")
                                                     && !(from te in db.tblEquiposTrabajo select te.Id_Coordinador).Contains(u.Id)
                                                     select u).ToList();

Con expresiones pudo haberlo hecho tambien.

Algo como..

Código:
var query = db.AspNetUsers.Where(u=> u.Cargo == "Coordinador" && db.tblEquiposTrabajo.Select(te => te.Id_Coordinador).ToArray().Contains(u.Id)).ToList();

Suponiendo que sea EF o el difunto LINQ to SQL.

Pero chevere que resolvio ;).

SuerteX :)
 

Ivanzinho

Lanero Reconocido
28 Sep 2004
1,655
Raro... tengo rato trabajando con ellos y nunca he visto un problema parecido :S.



Antes que el SQL Server revise el Servidor, los event log le peuden dar luz ;).



Con expresiones pudo haberlo hecho tambien.

Algo como..

Código:
var query = db.AspNetUsers.Where(u=> u.Cargo == "Coordinador" && db.tblEquiposTrabajo.Select(te => te.Id_Coordinador).ToArray().Contains(u.Id)).ToList();

Suponiendo que sea EF o el difunto LINQ to SQL.

Pero chevere que resolvio ;).

SuerteX :)

Que no se ha dado cuenta de la lentitud que es diferente...
 

Los últimos temas