우리는 데이터베이스에서 고정 트랜잭션 로그 크기로 작업하고 있으며 로그 크기를 모니터링하는 응용 프로그램을 함께 사용하여 상황이 너무 어려워지고 고정 trn 로그를 늘려야 할 때를 볼 수 있습니다. .프로그래밍 방식으로 SQL 2005에서 트랜잭션 로그의 크기를 가져 오는 방법은 무엇입니까?
실행할 수있는 TSQL 명령이 있습니까? 트랜잭션 로그의 현재 크기와 트랜잭션 로그의 고정 된 제한을 알려줍니다.
우리는 데이터베이스에서 고정 트랜잭션 로그 크기로 작업하고 있으며 로그 크기를 모니터링하는 응용 프로그램을 함께 사용하여 상황이 너무 어려워지고 고정 trn 로그를 늘려야 할 때를 볼 수 있습니다. .프로그래밍 방식으로 SQL 2005에서 트랜잭션 로그의 크기를 가져 오는 방법은 무엇입니까?
실행할 수있는 TSQL 명령이 있습니까? 트랜잭션 로그의 현재 크기와 트랜잭션 로그의 고정 된 제한을 알려줍니다.
귀하의 코드를 사용했지만 int로 변환하는 중 오류가 발생했습니다. "메시지 8115, 수준 16, 상태 2, 줄 1 산술 오버플로 오류 식을 데이터 형식 int로 변환하는 중 오류가 발생했습니다." 그래서 "* 8"이 있던 곳이면 * 8.0으로 바뀌었고 코드는 완벽하게 작동합니다.
SELECT (size * 8.0)/1024.0 AS size_in_mb
, CASE
WHEN max_size = -1
THEN 9999999 -- Unlimited growth, so handle this how you want
ELSE (max_size * 8.0)/1024.0 END AS max_size_in_mb
FROM YOURDBNAMEHERE.sys.database_files
WHERE data_space_id = 0
빠른 구글 검색이 밝혀 : 왜 당신이 트랜잭션 로그에 자동 증가를 사용하지 않는
DBCC SQLPERF (LOGSPACE)
? 이것이보다 안정적인 해결책이 될 것 같습니다.
이 내 머리 위로 떨어져, 그래서 당신이 수학을 다시 한 번 확인 할 수 있습니다 ...
SELECT
(size * 8)/1024.0 AS size_in_mb,
CASE
WHEN max_size = -1 THEN 9999999 -- Unlimited growth, so handle this how you want
ELSE (max_size * 8)/1024.0
END AS max_size_in_mb
FROM
MyDB.sys.database_files
WHERE
data_space_id = 0 -- Log file
해당 시스템보기에서 얻을 수있는 것을 더는 성장의 증가로이 로그가 자동 증가로 설정되었는지 여부와 특정 양 또는 백분율만큼 증가하도록 설정되었는지 여부를 지정합니다.
HTH!
당신이 정말로 고정 된 크기의 트랜잭션 로그에 충실해야하는 경우, 좀 여유를 허용하는 적당한 크기로 설정하는 것이 좋습니다 다음 다음 두 가지 중 하나를 수행 것 :
또는
또한 다음 기사가 유용 할 수도 있습니다. How to stop the transaction log of a SQL Server database from growing unexpectedly.
sys.database_files를 사용하면 로그 파일의 크기 만 제공되고 로그 파일 크기는 제공하지 않습니다. 파일이 고정 크기 인 경우이 방법은별로 유용하지 않습니다. DBCC SQLPERF (LOGSPACE)는 다소 오래된 학교이지만 이전 버전의 SQL Server를 지원해야하는 경우 잘 작동합니다.
대신이 같은 dm_os_performance_counters 테이블을 사용할 수 있습니다
SELECT
RTRIM(instance_name) [database],
cntr_value log_size_kb
FROM
sys.dm_os_performance_counters
WHERE
object_name = 'SQLServer:Databases'
AND counter_name = 'Log File(s) Used Size (KB)'
AND instance_name <> '_Total'
이상 FILEPROPERTY
또한 파일 내에서 사용 된 공간의 양을 노출 훨씬 덜 복잡 모든 다른 답변보다 :
select [Name], physical_name [Path], CAST(size AS BIGINT)*8192 [TotalBytes], CAST(FILEPROPERTY(name,'SpaceUsed') AS BIGINT)*8192 [UsedBytes], (case when max_size<0 then -1 else CAST(max_size AS BIGINT)*8192 end) [MaxBytes]
from sys.database_files
내가 선택한 것은 아닙니다.DBA는 정적으로 크기가 조정 된 트랜잭션 로그가 더 효율적이라고 말합니다. –
나는 엄격한 DBA보다 SQL 개발자가 많지만 로그 파일의 크기가 정확하지 않고 너무 자주 성장해야만 성능에 영향을 주어야합니다. 성장의 실제 행위는 약간의 성과를 먹는다. 그러나 자동 증가는 대체로 예기치 않은 비상 사태를위한 것이어야한다. –
DBCC SQLPERF는 서버에 대한 추가 사용 권한이 필요합니다. 따라서 sys.database 파일 응답과 함께갔습니다. DBCC SQLPerf는 동시에 모든 데이터베이스를 제공하는 이점이 있습니다 ... –