2012-01-19 2 views
3

우리는 C++ 기반 프로젝트에서 Sqlite3를 내장 데이터베이스로 사용하고 있습니다. sqlite3 인터페이스 (실제로 로그 레코드를 커밋하는 인터페이스)를 사용하는 프로세스는 데이터베이스의 크기가 커짐에 따라 힙 메모리를 확장하는 것처럼 보입니다.임베디드 시스템의 Sqlite3 - 프로세스 메모리가 증가합니까?

힙 메모리 확장은 데이터베이스의 크기와 직접적으로 관련이 있습니다 (증거 : "데이터베이스 삽입"행이 주석 처리 된 경우 확장이 수행되지 않으며 로그 랩핑이 사용 가능한 경우 데이터베이스가 시작될 때). 확장이 끝나면 마치 마치 펼쳐지는 것입니다.

우리는 유닉스 계열 OS를 사용하고 있습니다.

SQLite3가 어떤 종류의 캐싱을 수행 할 수 있는지 알고 있습니까? UNIX가 자체적으로이 작업을 수행하고 있거나 모든 것이 반드시 문제가되는 경우? 여기서의 걱정은 분명히 힙 메모리가 소모되어 시스템이 손상 될 수 있다는 것입니다.

유닉스 캐싱 자체에 대한 이상한 언급을 보았고, 캐시 관련 메모리를 공개 할 필요가있을 때이를 공개했다. 그러나 필자는 그 사실에 대해 충분히 확신하지 못했다. SQLite3 문서에서 관련 항목을 성공적으로 찾지 못했습니다.

답변

2

며칠 후에 데이터베이스 생성시 또는 연결 시작 전에 pragma를 사용하여이 문제를 완화 할 수 있다고 결정했습니다. 아무도 그 질문을 게시 이후 논평하지 않았기 때문에 나는 받아 들인 대답으로 그것을 게시 할 것이다.

sqlite3 인터페이스를 통해이를 설정하고 더 좋아하는 숫자 또는 0으로 설정하십시오.

PRAGMA cache_size=0; 

데이터베이스 크기에 따라 프로세스 메모리가 증가하지 않도록합니다. 분명히 "기본"캐싱 제한이 있더라도 sqlite3을 크로스 컴파일 할 때 사용되는 컴파일 옵션 때문에 사용하지 않거나 구현시 작동하지 않는 것 같습니다. pragma를 설정하면 프로세스 크기 증가를 막기위한 한계가 올바르게 적용됩니다.

http://www.sqlite.org/pragma.html#pragma_cache_size

: 여기

는 추가 정보를 참조입니다
관련 문제