Firebird 데이터베이스를 임시 블롭으로 "부풀리는" 방법
이것은 “하지 말아야 할 것"에 대한 글 중 하나입니다 - 단지 예시일 뿐입니다. Firebird 데이터베이스의 비정상적인 증가를 발견했다면, BLOB 연결(concatenation)을 사용하는 저장 프로시저, 트리거 또는 execute block을 작성하지 않았는지 확인하세요.
어떤 경우에는 Firebird가 임시 BLOB을 데이터베이스 파일 내부에 저장하므로 데이터베이스가 매우 빠르게 커집니다.
이 문제는 HQbird에서 해결되었으며, 임시 BLOB을 데이터베이스 자체 대신 임시 폴더로 보낼 수 있습니다.
다음 예제는 이 문제를 보여줍니다: 데이터베이스 파일에 저장되는 많은 수의 작은 임시 BLOB을 생성하여 Firebird 데이터베이스를 약 2GB로 “부풀립니다” (주의하세요 - 프로덕션 또는 중요한 데이터베이스에서는 실행하지 마세요!):
execute block
returns (
BLB blob)
as
declare BLB1 blob;
declare I integer;
begin
I = 0;
BLB = 'blabla';
BLB1 = cast('blablablablablablablablablablablablablabla' as blob);
while (I < 10000) do
begin
BLB = BLB || BLB1;
I = I + 1;
end
suspend;
end
Firebird는 트랜잭션이 커밋(또는 롤백)될 때까지 임시 BLOB을 유지합니다. 트랜잭션을 커밋한 후 코드를 다시 실행하면 데이터베이스 파일이 커지지 않는 것을 확인할 수 있습니다 - 이는 데이터베이스 내부의 임시 BLOB 공간이 재사용되기 때문입니다.
Firebird Friday Jokes를 텔레그램 채널에서 팔로우하세요: https://t.me/firebirdsql