求问:学校ERP系统SQLSERVER日志文件超过50G了,如何办?

混世罗汉 2017-08-15 10:57:35
各位兄台好:
请问我校的ERP(综合管理系统),用的是SQLSERVER2008,日志文件超过50G了,数据库文件6G,但发现此系统查询、执行操作时,有点缓慢,请问:

1、是否和日志文件超大有关系呢?

2、如果要将日志文件变小,用什么办法?(收缩试了,效果不明显)

删除 日志文件,重新建,又不太敢。 求支招,要安全稳定,搞不好会丢饭碗了。
...全文
395 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
混世罗汉 2017-08-16
  • 打赏
  • 举报
回复
先谢谢了,等本周试了,再来结分。谢谢
吉普赛的歌 版主 2017-08-15
  • 打赏
  • 举报
回复
慢跟日志应该没有直接关系, 你先用下面的sql查一下, 看到底哪些SQL慢, 具体事情具体分析:
SELECT OBJECT_NAME(qt.objectid, qt.dbId)  AS procName,
       DB_NAME(qt.dbId)                   AS [db_name],
       qt.text                            AS SQL_Full,
       SUBSTRING(
           qt.text,
           (qs.statement_start_offset / 2) + 1,
           (
               (
                   CASE statement_end_offset
                        WHEN -1 THEN DATALENGTH(qt.text)
                        ELSE qs.statement_end_offset
                   END 
                   - qs.statement_start_offset
               ) / 2
           ) + 1
       )                                  AS SQL_Part --统计对应的部分语句
       ,
       qs.creation_time,
       qs.last_execution_time,
       qs.execution_count,
       qs.last_elapsed_time / 1000000     AS lastElapsedSeconds,
       qs.last_worker_time / 1000000      AS lastCpuSeconds,
       CAST(
           qs.total_elapsed_time / 1000000.0 / (
               CASE 
                    WHEN qs.execution_count = 0 THEN -1
                    ELSE qs.execution_count
               END
           ) AS DECIMAL(28, 2)
       )                                  AS avgDurationSeconds,
       CAST(qs.last_logical_reads AS BIGINT) * 1.0 / (1024 * 1024) * 8060 AS 
       lastLogicReadsMB,
       qs.last_logical_reads,
       qs.plan_handle
FROM   sys.dm_exec_query_stats qs
       CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS p
WHERE  qs.last_execution_time >= CONVERT(CHAR(10),GETDATE(),120)+' 08:00'	--今天8点之后的慢SQL
       AND qs.last_elapsed_time >= 3 * 1000 * 1000							--只取执行时间大于 3 秒的记录
       AND qt.[text] NOT LIKE '%Proc_DBA%'
ORDER BY
       qs.last_worker_time DESC
吉普赛的歌 版主 2017-08-15
  • 打赏
  • 举报
回复
引用 3 楼 rendonlin 的回复:
如果直接删除日志文件,再附加数据库文件,此时会提示你没有日志文件,新增一个日志文件,这样日志文件是会变小。 但,请问,是否会对数据库文件或系统有影响??
这样是可以, 但会有非常大的危险性, 可能丢失数据。 按一楼的办法都可以了。 或者: 1. 备份日志; 2. 收缩日志; 其实这两步应该用作业实现, 每天凌晨定时执行一次的。 如果库并不是那么重要, 直接弄成简单恢复模式就好, 省很多事
混世罗汉 2017-08-15
  • 打赏
  • 举报
回复
如果直接删除日志文件,再附加数据库文件,此时会提示你没有日志文件,新增一个日志文件,这样日志文件是会变小。 但,请问,是否会对数据库文件或系统有影响??
OwenZeng_DBA 2017-08-15
  • 打赏
  • 举报
回复
引用 楼主 rendonlin 的回复:
各位兄台好: 请问我校的ERP(综合管理系统),用的是SQLSERVER2008,日志文件超过50G了,数据库文件6G,但发现此系统查询、执行操作时,有点缓慢,请问: 1、是否和日志文件超大有关系呢? 2、如果要将日志文件变小,用什么办法?(收缩试了,效果不明显) 删除 日志文件,重新建,又不太敢。 求支招,要安全稳定,搞不好会丢饭碗了。
1.操作慢可以很多因素有关,需要具体的排查 2.用下面的语句查看日志无法重用的原因
SELECT log_reuse_wait_desc ,DB_NAME(database_id) FROM sys.databases
二月十六 版主 2017-08-15
  • 打赏
  • 举报
回复
不敢删除就先做好备份,然后收缩一下日志:
 alter database 数据库名 set recovery SIMPLE --设置为简单模式
 dbcc shrinkfile('数据库日志名名') --like 数据库名_log 
 alter database  数据库名set recovery FULL --恢复模式
OwenZeng_DBA 2017-08-15
  • 打赏
  • 举报
回复
建议不要直接删除日志,你运行下我发那个语句先
吉普赛的歌 版主 2017-08-15
  • 打赏
  • 举报
回复
日志可能包含尚未提交的事务, 你删除了日志文件事务就没法还原了, 但提交了事务的人会找你麻烦
吉普赛的歌 版主 2017-08-15
  • 打赏
  • 举报
回复
日志里可能包含尚未提交的事务, 如果你把日志删除了, 这些事务就没办法还原了, 但最终人家提交了事务的人会找你麻烦
混世罗汉 2017-08-15
  • 打赏
  • 举报
回复
谢谢楼上的兄弟们,我先试一下,先变成简单模式,再恢复这样的办法 。说实话,我没试过,我得先在本人电脑上先试一下。 实在不行,就删除 。 再问,楼上提到,删除 日志文件,再新增,会影响数据,是什么意思?不太明白?

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧