我想知道如果得到IIS直接login到SQL Server是资源成本,一个更好的解决scheme可能会生成日志文件,每个小时将此文件导入到SQL Server。
是否非常大的成本直接login到sql server的每个请求? 对于每个请求,页面都是打开连接到数据库的。
我个人从来没有这样做过; 而是我已经设置了一个脚本来将旧的IIS日志文件导入到Logparser的SQL数据库中。
这是我使用的PowerShell脚本
### Parameters ### $iisLogLocation = "$env:systemdrive\inetpub\logs\logfiles" $logParserLocation = "C:\Program Files\Log Parser 2.2" ### Main Script ### $files = Get-ChildItem $iisLogLocation -Recurse | Where-Object{$_.LastWriteTime -le (Get-Date).Subtract((New-TimeSpan -Days 7))} if ($files.Count -gt 0){ foreach ($file in $files){ $logParserArgs = @" "SELECT LogFilename, LogRow, TO_LOCALTIME(TO_TIMESTAMP(date, time)), s-sitename, s-computername, s-ip, cs-method, cs-uri-stem, cs-uri-query, s-port, cs-username, c-ip, cs-version, cs(User-Agent), cs(Cookie), cs(Referer), cs-host, sc-status, sc-substatus, sc-win32-status, sc-bytes, cs-bytes, time-taken INTO IisLogData FROM $($file.FullName)" -o:SQL -server:.\sql01 -database:logs -ignoreIdCols:ON -fixColNames:ON -maxStrFieldLen:1000 "@ Push-Location $logParserLocation LogParser.exe $logParserArgs Remove-Item $file.FullName Pop-Location } }
将IIS日志直接写入SQL服务器而不是文本文件的最糟糕的事情是现在有两个真正的失败点:您的IIS实例和数据库服务器。
如果您启动数据库日志logging到正在运行生产应用程序的数据库的同一台计算机上,那么您将从该应用程序中获取资源。 数据库可能会阻塞,可能会出现空间不足(不可否认,硬盘驱动器也是如此),但是它们需要更多的定期维护,也就是说,它们可能因为与您的应用程序完全无关的原因而失败。 如果失败了,那么日志数据就没有了。
打开和写入文本文件日志是非常低的开销。 commandbreak的脚本正是那种将日志移动到数据库的短小而简单的事情; 如果数据库closures,日志仍然存在 。