Qrys Pesados SQL Server

Qrys Pesados SQL Server

Buen Dia
Requiero Qrys muy pesados para estresar el server de SQL porque necesito levantar la memoria a mas de 4GB de RAM y si conocen aplicaciones gratuitas para estres de SQL lo agradezco, realice un programita en Net pero solo levanta 120MB de RAM

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Prueba1 = "SELECT TOP 100 qs.sql_handle, qs.plan_handle, cp.cacheobjtype, cp.usecounts, cp.size_in_bytes, qs.statement_start_offset, qs.statement_end_offset, qt.dbid, qt.objectid, qt.text, SUBSTRING(qt.text,qs.statement_start_offset/2, (case when qs.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text)) * 2 else qs.statement_end_offset end -qs.statement_start_offset)/2) as statement FROM sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt inner join sys.dm_exec_cached_plans as cp on qs.plan_handle=cp.plan_handle where cp.plan_handle=qs.plan_handle ORDER BY [dbid],[Usecounts] DESC"
MyConexion1 = New SqlConnection(strConexion)
MyConexion2 = New SqlConnection(strConexion)
MyConexion3 = New SqlConnection(strConexion)
MyConexion4 = New SqlConnection(strConexion)
n = 0

While 1 = 1
If n = 4 Then
n = 0
End If
n = n + 1

MyConexion1.Open()
MyCommand = New SqlCommand(Prueba1, MyConexion1)
MyCommand.ExecuteNonQuery()
MyConexion1.Close()

Prueba2 = "SELECT TOP 50 qs.total_worker_time, qs.total_elapsed_time, SUBSTRING(qt.text,qs.statement_start_offset/2, (case when qs.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text)) * 2 else qs.statement_end_offset end -qs.statement_start_offset)/2) as query_text, qt.dbid, dbname=db_name(qt.dbid), qt.objectid, qs.sql_handle, qs.plan_handle FROM sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt where qs.total_worker_time > qs.total_elapsed_time ORDER BY qs.total_worker_time DESC"
MyConexion1 = New SqlConnection(strConexion)

MyConexion2.Open()
MyCommand2 = New SqlCommand(Prueba2, MyConexion2)
MyCommand2.ExecuteNonQuery()
MyConexion2.Close()

Prueba3 = "Select * From INFORMATION_SCHEMA.SCHEMATA EXEC sp_helpuser EXEC master..xp_fixeddrives"
MyConexion3 = New SqlConnection(strConexion)

MyConexion3.Open()
MyCommand3 = New SqlCommand(Prueba3, MyConexion3)
MyCommand3.ExecuteNonQuery()
MyConexion3.Close()

Select Case n
Case 1
cadena = "Graciela"
Case 2
cadena = "Selene"
Case 3
cadena = "Amacita"
End Select
Prueba4 = "DECLARE @bd varchar(50), @str varchar(250) DECLARE bdcursor cursor for select name from sysdatabases open bdcursor fetch bdcursor into @bd WHILE @@FETCH_STATUS = 0 BEGIN select @str = 'select a.name as objeto from ' + @bd + '..sysobjects a, '+ @bd + '..syscomments b where a.id = b.id and b.text like ''%" & cadena & "%''' exec(@str) fetch bdcursor into @bd END DEALLOCATE bdcursor "
MyConexion4 = New SqlConnection(strConexion)

MyConexion4.Open()
MyCommand4 = New SqlCommand(Prueba4, MyConexion4)
MyCommand4.ExecuteNonQuery()
MyConexion4.Close()

End While

End Sub


Comentarios

Hola como estas !, bueno, suponemos que estas corriendo un sql 2005 u otra version anterior.
Primero tenes que saber sobre que OS esta coriendo el SQL Server y verificar si la prueba la podes hacer:

Windows Server 2003, Standard Edition supports physical memory up to 4 GB.
Windows Server 2003, Enterprise Edition supports physical memory up to 32 GB.
Windows Server 2003, Datacenter Edition supports physical memory up to 64 GB.

Luego verificar que en el boot.ini este configurado el /PAE.

En SQL Server Habilitar AWE Memory

Asignar la "policy Lock Pages in Memory" para la cuenta que corre sqlservr.exe para sistemas de 32 bits.

Una vez que esos requisitos esten ok, una prueba sencilla es la siguiente:

1) Levantar los contadores de memoria para SQL Server.
2) Crear una tabla y cargar datos con un proceso (por ej: while o for) para alcanzar un volumen de 4.3 GB.
3) DBCC pintable () de la tabla creada. Ojo realizarlo en ambiente laboratorio, pues es una feature que te carga la tabla entera en memoria y puede ser peligroso.
De esta manera te vas a dar cuenta en forma directa si el SQL server utiliza mas de 4 GB.
4) Si no queres utilizar el punto anterior, podrías probar de realizar consultas por rango de la tabla con diferentes conexiones en paralelo.

Las sentencias que pasaste te alocan 120 MB y no crece porque la info ya la tiene en memoria (buffer) y siempre te devuelve lo mismo o bien por algoritmo interno va vaciando el buffer y alocando nueva data.

Herramientas que podes utilizar para stress:

1) Read80Trace
2) OSTRESS

Abrazo virtual !.

nalonso