VACUUM 是否在数据库目录之外执行 I/O 操作?

发布于 2024-12-18 10:07:46 字数 407 浏览 0 评论 0原文

对于通过 Perl 程序访问的 SQLite 数据库,我可以使用 INSERT 和 DELETE 命令,但不能使用 VACUUM,这会引发:

磁盘I/O错误

如果我以 root 身份运行该程序,则没有问题,因此肯定是某些权限问题。我检查了该过程中涉及的每个文件的权限,应该没问题。 VACUUM 命令是否在数据库目录之外执行 I/O 操作?

my $dbh = DBI->connect("dbi:SQLite:someDB.db", undef, undef, {RaiseError => 1, AutoCommit => 1});
my $sth = $dbh->prepare("VACUUM;");
$sth->execute;

With an SQLite database I access through a Perl program I can use the INSERT and DELETE commands but not VACUUM, which raises:

disk I/O error

If I run the program as root I got no problem so it must be some permission issue. I checked permissions for every file involved in the process and it should be OK. Is the VACUUM command performing I/O operations outside the database directory?

my $dbh = DBI->connect("dbi:SQLite:someDB.db", undef, undef, {RaiseError => 1, AutoCommit => 1});
my $sth = $dbh->prepare("VACUUM;");
$sth->execute;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦初启 2024-12-25 10:07:46

如果您想查看 VACUUM 期间执行的 I/O 操作,您可以使用 strace。它将列出 SQLite 执行的所有系统调用,包括磁盘 IO。

strace sqlite3 someDB.db 'VACUUM;'

If you'd like to see I/O operations which are executed during VACUUM you can use strace. It will list all system calls executed by SQLite, including disk IO.

strace sqlite3 someDB.db 'VACUUM;'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文