Últimos mensajes - Powered by IBM
- Normalización
- Normalización
- Error -2147221503 [ODBC SQL Server ...
- Sql Server Backups
- sql server
- informe de consumo mensual
- rangos de fecha
- error con instancia en sql server 2005 express ...
- Conexion via Programacion a SQL SERVER 2008 R2
- Exportar datos desde un archivo de Texto a SQL ...
Palabras claves
Hola Miguel,
Gracias por tu respuesta y gracias tambien a todas las personas que han
hecho sus aportes.
Segun mi lógica pienso que si hago un backup completo de la BD pues no
tendria mucho sentido tener un log extremadamente grande, por lo tanto
cambie el mecanismo de registro en el log de full a simple. Aunque por
seguridad comprendo que mantener el mayor registro de transacciones en el
log, podria ser lo mas ideal. Tambien me parece muy interesante lo que dices
sobre la fragmentacion y tal vez sea una de las causas del bajo performance,
pues nunca se han desfragmentado los discos del server. A proposito,
¿recomiendas que haga esto con la herramienta que incluye windows o hay
alguna otra mejor?
Un colega y yo estamos convencidos de la que la aplicacion tiene una
sobrecarga de indices que no son necesarios, pero como ya dije en mi primer
mail, no podemos meternos en el diseño de la misma por ser de terceros y no
disponer del codigo (creo tambien que borrar algunos indices podria ser
arriesgado). Pero a simple vista podemos apreciar que hay tablas altamente
transaccionales como detalles de factura o detalles de asientos contables
que tienen mas de 12 indices, y son tablas con varios millones de registro,
y seguramente esta cantidad de indices impactará en el rendimiento de la
aplicación.
Respondiendo a Eladio, les mando el resultado (en una attachment) de la
instruccion dbcc sqlperf (waitstats) a ver si pueden detectar alguna
anormalidad.
Nuevamente muchas gracias por sus comentarios y quedo a la espera de futuros
aportes que pudieran ayudarme.
Saludos,
Edmundo J. Davila
"Miguel Egea" <miguel@QUITAONLINE.sqlu.com> escribió en el mensaje
news:OcMyIJpcGHA.1272@TK2MSFTNGP03.phx.gbl...
Gracias por tu respuesta y gracias tambien a todas las personas que han
hecho sus aportes.
Segun mi lógica pienso que si hago un backup completo de la BD pues no
tendria mucho sentido tener un log extremadamente grande, por lo tanto
cambie el mecanismo de registro en el log de full a simple. Aunque por
seguridad comprendo que mantener el mayor registro de transacciones en el
log, podria ser lo mas ideal. Tambien me parece muy interesante lo que dices
sobre la fragmentacion y tal vez sea una de las causas del bajo performance,
pues nunca se han desfragmentado los discos del server. A proposito,
¿recomiendas que haga esto con la herramienta que incluye windows o hay
alguna otra mejor?
Un colega y yo estamos convencidos de la que la aplicacion tiene una
sobrecarga de indices que no son necesarios, pero como ya dije en mi primer
mail, no podemos meternos en el diseño de la misma por ser de terceros y no
disponer del codigo (creo tambien que borrar algunos indices podria ser
arriesgado). Pero a simple vista podemos apreciar que hay tablas altamente
transaccionales como detalles de factura o detalles de asientos contables
que tienen mas de 12 indices, y son tablas con varios millones de registro,
y seguramente esta cantidad de indices impactará en el rendimiento de la
aplicación.
Respondiendo a Eladio, les mando el resultado (en una attachment) de la
instruccion dbcc sqlperf (waitstats) a ver si pueden detectar alguna
anormalidad.
Nuevamente muchas gracias por sus comentarios y quedo a la espera de futuros
aportes que pudieran ayudarme.
Saludos,
Edmundo J. Davila
"Miguel Egea" <miguel@QUITAONLINE.sqlu.com> escribió en el mensaje
news:OcMyIJpcGHA.1272@TK2MSFTNGP03.phx.gbl...
Bueno Edmundo, aquí he puesto un pequeño artículo en el que explico porqué
no me gusta el shrink
http://www.configuracionesintegrale...articulo10
Saludos
Miguel Egea
"Miguel Egea" <miguel@QUITAONLINE.sqlu.com> escribió en el mensaje
news:%236qlAuocGHA.464@TK2MSFTNGP05.phx.gbl...
No edmndo, no trunques el log, no le hagas shrink ?porque has de
hacerselo?, voy a ver si escribo un artículo para portalsql con estas
recomendaciones.
De todas formas 11 GB es una base de datos pequeña, y debería sobrarte
con
el server que tienes, tendrás que buscar consultas agresivas, pon una
traza de profiler que te caze todas las consultas con duración mayor que
500 y de las 5 o 6 que más se repitan postea alguna aquí a ver si te
ayudamos a optimizar esto.
Miguel Egea Gómez
SQLServer MVP
Director de Servicios Corporativos
Solid Quality Learning Iberoamericana
"Solid Quality Learning es el proveedor global en el que puede confiar
para obtener soluciones y educación avanzada para la plataforma completa
de sistemas de bases de datos de Microsoft."
www.SolidQualityLearning.com
"Edmundo J. Davila" <edavila@monisa.com> escribió en el mensaje
news:Olc%23mCJcGHA.3472@TK2MSFTNGP02.phx.gbl...
Isaias,
Son 11 GB de datos, aunque el dispositivo tiene solamente 10 GB ocupados
y casi 2GB vacios, pese a que he hecho shrink de la BD. El job siempre
se mantiene al minimo porque se hacen 2 Backups completos de la BD en el
dia y antes de hacerlos "shrinkeo" y trunco el log. Las estadisticas en
el server estan configuradas para actualizarse de forma automatica. No
hay un plan de mantenmiento como tal, sin embargo, el job lo que hace
son
todos los pasos del plan de mantenimiento, pero para no tenerlos por
separados los puse en un solo job con varios pasos.
Pero los pasos incluyen:
1. Backup del log
2. Shrink del log
3. Truncate del log
4. Chequeo de integridad
5. Optimizacion, rescontruccion de indices y correcion de problemas
menores
6. Respaldo completo de la BD
El asunto que yo pense que por reconstruir indices y optimizar diario
iba
a notar alguna mejoria significativa en el rendimiento de la aplicacion
y
no ha sido asi.
"Isaias" <Isaias@discussions.microsoft.com> escribió en el mensaje
news:855540F1-099D-42A3-99E2-15DC7E893A49@microsoft.com...
Dices que tiene 11 GB, ¿en Datos, en Log?, ¿Tienes un PLAN DE
MANTENIMIENTO?,
¿Depuras el Log de transacciones?, ¿Se generan en AUTOMATICO tus
estadisticos?
Saludos
IIslas
"Edmundo J. Davila" escribió:
Estimad@s colegas,
Tengo una base con un nivel transaccional elevado (tiene 11 GB) y una
cantidad de indices en tablas altamente transaccionales que en mi
opinion es
exagerado. Esta base de datos es de una aplicacion comercial de
terceros,
por lo que borrar algunos indices que en mi opinion no son tan
relevantes,
me parece una alternativa arriesgada. En mi servidor tengo windows
2000
server y sql server 2000 ent. edi. El servidor tiene 2 procesadores
xeon de
3.6GHZ y 2GB de RAM, tengo implementado un raid 1 con 2 DD de 36.4 GB.
Este
Raid tiene 2 unidades logicas, una para el SO y otra para la BD.
Para mejorar el rendimiento de la aplicacion, optamos por crear un job
que
se ejecuta diariamente para reconstruir indices con un fill factor del
80% y
tambien realiza un chequeo de integridad. Mi pregunta es que tan
recomendable es reconstruir indices diariamente y que tanto pueden
afectarse
las estadisticas de uso en el servidor, de tal forma que impacte en el
rendimiento de la aplicacion, ya que apartir de la ejecucion diaria de
este
job no se han sentido mejoras significativas.
Adjunto script del job por si les sirve para analizarlo. De antemano
gracias por sus comentarios.
Edmundo J. Davila
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name =
N'Database
Maintenance') < 1
EXECUTE msdb.dbo.sp_add_category @name = N'Database Maintenance'
SELECT @JobID = job_id
FROM msdb.dbo.sysjobs
WHERE (name = N'EXACTUS - Mantenimiento diario')
IF (@JobID IS NOT NULL)
BEGIN
IF (EXISTS (SELECT *
FROM msdb.dbo.sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
RAISERROR (N'Unable to import job ''EXACTUS - Mantenimiento
diario''
since there is already a multi-server job with this name.', 16, 1)
GOTO QuitWithRollback
END
ELSE
EXECUTE msdb.dbo.sp_delete_job @job_name = N'EXACTUS -
Mantenimiento
diario'
SELECT @JobID = NULL
END
BEGIN
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT ,
@job_name = N'EXACTUS - Mantenimiento diario', @owner_login_name >>>>> N'MONISAIII\Administrator', @description = N'No description
available.',
@category_name = N'Database Maintenance', @enabled = 1,
@notify_level_email
= 0, @notify_level_page = 0, @notify_level_netsend = 0,
@notify_level_eventlog = 2, @delete_level= 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID,
@step_id >>>>> 1, @step_name = N'LOG BACKUP', @command = N'BACKUP LOG [Exactus]
TO DISK = N''E:\Respaldo2K\ExactusBK''
WITH NOINIT , NOUNLOAD , NAME = N''Exactus Log backup'',
NOSKIP , STATS = 10, NOFORMAT', @database_name = N'master', @server
>>>>> N'',
@database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code
= 0,
@flags = 0, @retry_attempts = 0, @retry_interval = 1,
@output_file_name
>>>>> N'', @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id
= 4,
@on_fail_action = 4
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID,
@step_id >>>>> 2, @step_name = N'LOG TRUNCATE', @command = N'BACKUP LOG Exactus
WITH TRUNCATE_ONLY', @database_name = N'master', @server = N'',
@database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code
= 0,
@flags = 0, @retry_attempts = 0, @retry_interval = 1,
@output_file_name
>>>>> N'', @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id
= 4,
@on_fail_action = 4
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID,
@step_id >>>>> 3, @step_name = N'LOG SHRINK', @command = N'dbcc shrinkfile
(''Exactus_db_log'', 100)', @database_name = N'Exactus', @server =
N'',
@database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code
= 0,
@flags = 0, @retry_attempts = 0, @retry_interval = 1,
@output_file_name
>>>>> N'', @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id
= 4,
@on_fail_action = 4
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID,
@step_id >>>>> 4, @step_name = N'INTEGRITY CHECK WITH REPAIR OF MINOR ERRORS',
@command >>>>> N'use master
alter database exactus set SINGLE_USER
WITH ROLLBACK IMMEDIATE
DBCC CHECKDB( ''exactus'', REPAIR_FAST)
alter database exactus set MULTI_USER
with ROLLBACK IMMEDIATE
', @database_name = N'master', @server = N'', @database_user_name >>>>> N'',
@subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0,
@retry_attempts
= 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id
= 0,
@on_success_action = 3, @on_fail_step_id = 0, @on_fail_action = 3
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID,
@step_id >>>>> 5, @step_name = N'OPTIMIZATION. INDEX REBUILD', @command = N'EXECUTE
master.dbo.xp_sqlmaint N''-D Exactus -WriteHistory -RebldIdx
15 -RmUnusedSpace 50 10 ''', @database_name = N'master', @server =
N'',
@database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code
= 0,
@flags = 0, @retry_attempts = 0, @retry_interval = 1,
@output_file_name
>>>>> N'', @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id
= 0,
@on_fail_action = 3
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID,
@step_id >>>>> 6, @step_name = N'COMPLETE DB BACKUP', @command = N'BACKUP DATABASE
[Exactus]
TO DISK = N''E:\Respaldo2K\ExactusBK''
WITH INIT , NOUNLOAD ,
NAME = N''Exactus backup'', NOSKIP ,
STATS = 10, NOFORMAT', @database_name = N'master', @server = N'',
@database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code
= 0,
@flags = 0, @retry_attempts = 0, @retry_interval = 1,
@output_file_name
>>>>> N'', @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id
= 0,
@on_fail_action = 3
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID,
@step_id >>>>> 7, @step_name = N'TURN OFF THE SERVER', @command = N'Set wmi >>>>> GetObject("winmgmts:{(Shutdown)}//./root/cimv2")
set objset = wmi.instancesof("win32_operatingsystem")
for each obj in objset
set os = obj : exit for
next
os.win32shutdown (8)', @database_name = N'VBScript', @server = N'',
@database_user_name = N'', @subsystem = N'ActiveScripting',
@cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0,
@retry_interval
= 1, @output_file_name = N'', @on_success_step_id = 0,
@on_success_action >>>>> 1, @on_fail_step_id = 0, @on_fail_action = 2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID,
@start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID,
@name
= N'Diario', @enabled = 1, @freq_type = 8, @active_start_date >>>>> 20060428,
@active_start_time = 213000, @freq_interval = 62, @freq_subday_type >>>>> 1,
@freq_subday_interval = 0, @freq_relative_interval = 0,
@freq_recurrence_factor = 1, @active_end_date = 99991231,
@active_end_time >>>>> 235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID,
@server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
Preguntas similare
- ¿Cómo puedo re-enviar emails en formato HTML?
- Re: Como imprimir mediante una macro solo celdas escritas?
- Re: no puedo abrir ninguna pagina de terra
- Re: OT: Tierra llamando a Extremo beep beep! jeje
- Re-emplazar espacios en celdas
- Problema con re-instalación del Outlook Express
- E-mail con adjuntos, se re-envían, y re-envían, y re-envían....
- Se re-inicia el PC....
Busqueda sugerida
Leer las respuestas