SQLiteのファイルサイズの限界について質問します。


PHP+SQLite2で顧客管理システムを開発して、お客様に使っていただいております。
現在はとても軽快に動いているのですが、2年目で、ファイルサイズが400MBをこえてきました。
SQLiteについて調べてみると、ファイルサイズの限界が1GB、2GBと書いてあるサイトを見つけ、とても心配になってしまいました。

SQLiteの限界になり、データベースが止まってしまうと大変な事になってしまうので、最悪の場合、MySQLに移行も、考えなければいけないのかなと思っています。

できればこのまま何事もなく動作させたいのですが、SQLite2のファイルサイズの限界を変更させることはできないのでしょうか?

また、なんとか問題を回避する方法は無いものでしょうか。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/07/07 17:15:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:Iwa No.1

回答回数120ベストアンサー獲得回数6

ポイント75pt

古いSQLite2も同じかどうかはわかりませんが、少なくとも現行のSQLite3は128TiBが最大です。
ただ、こんなにあっても結局はファイルなのでファイルシステムに依存します。(例えばFAT32で使ってると2GiBしか使えないです)

http://www.sqlite.org/fileformat2.html

The maximum size database would be 2147483646 pages at 65536 bytes per page or 140,737,488,224,256 bytes
(最大サイズはデータベースには、ページあたり65536バイトまたは140,737,488,224,256バイトで2147483646ページになります)

id:Chroto

なるほど、ファイルシステムに依存するのですね。
現在、さくらのマネージドサーバ最上級プランを利用していまして、UnixのFreeBSDとのことです。
ファイルシステム、調べてみようと思います。

2012/06/30 22:26:15
id:a-kuma3 No.2

回答回数4971ベストアンサー獲得回数2153

ポイント75pt

SQLite 自体は、かなり大きいサイズが扱えるんです。
現在のドキュメントでは、140 TB ということになってます。
http://www.sqlite.org/fileformat2.html

The maximum size database would be 2147483646 pages at 65536 bytes per page or 140,737,488,224,256 bytes (about 140 terabytes).


ただ、SQLite の特徴の一つでもある、単一のファイルで可搬性がある、というのがネックになることがあります。
http://www.sqlite.org/different.html

Single Database File
An SQLite database is a single ordinary disk file that can be located anywhere in the directory hierarchy.
...


SQLite が動作する環境の OS やファイルシステムが単一のファイルとして扱えるサイズの影響を受けてしまうんです。

例えば、Windows で言うと、ファイルシステムが FAT16 だと、ひとつのファイルサイズは 2GB までなので、それ以上はプログラムが扱えません。
独立したシステムではなく、ライブラリとして動作する SQLite では、どうしようもない制限です。

また、SQLite を使うプログラムが使えるメモリサイズが、OS の影響を受けます。
Windows の 32bit 版では、プロセスが扱えるのは 2GB までなので、プログラムの組み方にもよりますが、扱えるデータ量に影響を与えます。

その制限を緩めるためには、以下のような対応をすることになります

  • ファイルシステムを変更する(例えば、FAT32 → NTFS)
  • OS を変更する(例えば、32bit → 64bit)
id:Chroto

140TB!
なんだか、安心しました・・。
わかりやすい説明ありがとうございます。

なるほど、OSやファイルシステムに影響されるんですね。
勉強になりました。

現在、さくらのマネージドサーバ最上級プランを利用していまして、UnixのFreeBSDとのことです。
FreeBSDバージョンが分からないので、あまりよくわかりませんが・・・

2012/06/30 22:24:08
id:oil999 No.3

回答回数1728ベストアンサー獲得回数320

ポイント75pt

SQLite2の規格上のファイルサイズの上限は140Tバイトです。
http://www.sqlite.org/fileformat2.html

しかし、OSのファイルシステムの上限によって制限される場合があります。
たとえばFAT16ベースのWindowsだと2Gバイトまでしか扱えません。FAT32でも4Gバイトが上限です。NTFSでは2Tバイトです。

id:Chroto

SQLite2の規格、140Tバイトなのですね。
SQLite3だけかと思っていたので、とても安心しました。
ありがとうございます。

2012/06/30 22:25:01
id:y-kawaz No.4

回答回数1422ベストアンサー獲得回数226

ポイント75pt

SQLiteのファイルサイズが140TB行けるからといって安心するのは早計です。仕様上の上限と実用上の上限は全く別物ですので。
使い方やテーブル構造にもよりますが、経験上レコード数が10万を超えたりファイルサイズが数GB~10GBを超える位になると目に見えて性能が劣化してきて使い物にならないレベルになってきます。

まぁ、400MB程度なら余裕だとは思いますが今後の増加ペースを考えたら他のDBへの移行は早めに考えたほうが良いと思いますよ。
個人的には、快適に使える限界は余裕を持って1GBまでくらいかなと考えてます。

id:Chroto

そうですか・・・現在レコード数が50000近くありますので、
他のDBへの移行も、検討しようと思います。
ありがとうございます。

2012/07/01 14:29:35
  • id:Iwa
    FreeBSDなら標準ファイルシステムのUFSでも1ファイルあたり8ZiBまでなのでまず問題ないでしょう。
    というより、レンタルサーバーの契約上ZiB単位の契約は無理ですから実質契約しているHDD一杯まで使えると思ってよいかと

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません