
如果使用以下语法在内存中创建SQLite,分配给它的最大内存大小是多少?
my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
如果内存的大小大于最大可用内存,会发生什么情况.

假设我有1 GB的1.1 GB可用大小,然后将一些数据写入磁盘或什么?
是否可以更改分配给内存SQLite的最大内存值?
它将使用虚拟内存,是的,它会写出到磁盘,一旦您超出了所有可用的内存,当它中断时内存 sqlite,它可能会抛出异常并具有不确定的行为,这可能与操作系统. 这些是SQLite的局限性:

如果要设置最大大小,则可以执行以下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支持编译指令: #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内存 sqlite,所以如果您想使用设置来播放100兆字节.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-197146-1.html
至于被平均的部份肯定在不你手中