如果创建了使用以下语法在内存中的SQLite数据库,那么什么是最大的内存分配给它的大小?
my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
如果内存数据库的大小比最大可用内存更大会发生什么。
假设我有1 GB的免费数据库大小成为1.1 GB,然后将一些数据写入到磁盘还是什么?
有没有办法来改变分配给内存SQLite数据库最大内存的值?
如果创建了使用以下语法在内存中的SQLite数据库,那么什么是最大的内存分配给它的大小?
my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
如果内存数据库的大小比最大可用内存更大会发生什么。
假设我有1 GB的免费数据库大小成为1.1 GB,然后将一些数据写入到磁盘还是什么?
有没有办法来改变分配给内存SQLite数据库最大内存的值?
它将使用虚拟内存,是的,它会写出到磁盘,一旦你已经超过了你所有的自由可用内存,当这样突破,它可能会抛出一个异常,有一个未定义的行为,也可能是与操作系统有关。 这些都是SQLite的限制: http://www.sqlite.org/limits.html 。
如果你想设置最大数据库大小,你可以执行以下SQL命令:
PRAGMA page_size = 512
PRAGMA max_page_count = 195313
在Perl:
$dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
$query_handle = $dbh->prepare("PRAGMA page_size = 512");
$query_handle->execute();
$query_handle = $dbh->prepare("PRAGMA max_page_count = 195313");
$query_handle->execute();
您可以通过创建临时表,并使用循环插入大量的对象进行测试,直到它击中了极限。
这将设置你的最大数据库大小100000256个字节。
SQLite数据库存储在页,这将设置页面大小和为您的数据库页面的最大数量。 你可以用任一参数发挥,以满足您的需求; 更大的页面意味着更多的性能,但增长较快。
这些都是说SQLite支持编译指示: http://www.sqlite.org/pragma.html#pragma_page_size 。
这是Python中一个简单的测试:
import sqlite3
con = sqlite3.connect(':memory:')
cur = con.cursor()
cur.execute("PRAGMA max_page_count = 195313")
cur.execute("PRAGMA page_size = 512")
cur.execute("CREATE TABLE test (random_values TEXT)")
index = 0
query = "INSERT INTO test (random_values) VALUES ('%s')" % "".join(['a' for index in xrange(1000)])
while True:
try:
c = cur.execute(query)
index += 1
except Exception as ex:
print str(ex)
break
print index * 1000
很快你会得到这样的事情:
sqlite3.OperationalError:数据库或磁盘已满
我得到93915000
由于开销字节,所以如果你想要的是100兆字节与设置玩。