mysql:12780
From: Tetsuro IKEDA <Tetsuro IKEDA <tetsuro@xxxxxxxxxx>>
Date: Sun, 19 Feb 2006 22:01:26 -0800
Subject: [mysql 12780] Re: Mysql JDBC接続時のサイズ制限
池田です。 誤解されているかも?と思ったので補足します。 >> 14bitで表現できる最大値 = 16KBですね。 > > これは拡張できなければちょっとまずいだと思います。業務アプリで100Kか > 1M超えるrowもたくさん出ていると思います。 > いちいちテーブル分割、項目統合するのは綺麗な設計が出来なくて > 開発工数も膨らむことになります。 InnoDBが格納できるレコードサイズそものの最大値は 4GB です。 例えば2GBの映像ファイルをバイナリデータとしてInnoDBに入れることは、 可能なはずで、その場合はMySQL 4.1.6以前では先頭の512バイトのみが、 MySQL 4.1.6以後では先頭の768のみが、そのレコードの主キーが格納されている Pageと同じPageに格納されて、残りのデータは別の領域に格納されることに なるはずです。 InnoDBのtablespace構造、すなわちtablespace->extent->page、および Leaf-NodeセグメントとNon-Leaf-Nodeセグメント、またInnoDBのインデックス実装 であるPage単位のClustered Idexなどの話がこれに関連してくるのではと、 個人的に推測していますが。 (もう少し勉強しないとはっきりしたことは私は言えませんが) kyou tech wrote: > > ご対応ありがとうございます。 > >> http://bugs.mysql.com/bug.php?id=17561 > > もっと柔軟なやり方はcreate databaseまたはcreate table時指定てきれば > いいなと思ったけど、OSSに対して厳しく要求できません。 > 最低ソースをいじらなくてconfigureで済めば、いいと思います。 > >> /* The data size of record must be smaller than this because we reserve >> two upmost bits in a two byte offset for special purposes */ >> #define REC_MAX_DATA_SIZE (16 * 1024) >> このように「2バイト-2bit分のoffsetにて管理している=14bit分」という説 >> 明があ > > ります。 > >> 14bitで表現できる最大値 = 16KBですね。 > > これは拡張できなければちょっとまずいだと思います。業務アプリで100Kか1M超 > える > row > もたくさん出ていると思います。いちいちテーブル分割、項目統合するのは綺麗 > な設 > 計が出来なくて > 開発工数も膨らむことになります。 > これも要望として反映していただけますか。 > でも今回はテーブル分割か項目の統合かをやらなければならないらしいですね > (>.< > ;) > > > > > > > >> From: Tetsuro IKEDA <tetsuro@xxxxxxxxxx> >> Reply-To: ml@xxxxxxxxxx >> To: ml@xxxxxxxxxx >> Subject: [mysql 12778] Re: Mysql JDBC接続時のサイズ制限 >> Date: Sun, 19 Feb 2006 13:43:55 -0800 >> >> 池田です。 >> >> InnoDBのPageサイズを./configureオプションで変更できるようにして欲しい、 >> という内容のFeature Requestを出しておきました。 >> >> http://bugs.mysql.com/bug.php?id=17561 >> >> どういう反応が返ってくるかは分かりませんが・・・。 >> >> Tetsuro IKEDA wrote: >> > こんにちは。池田です。 >> > >> > 長文レス失礼します。 >> > >> > >> >>一、 >> >>text項目にそれぞれ50000Bytesに入れてテストしました。 >> >>そうすると、c30まで登録できました。c31はで139がでました。 >> >>ただ、マニュアルによると >> >>「InnoDB stores the first 768 bytes of a VARCHAR, BLOB, or TEXT column >> >>in the row, and the rest into separate pages. 」 >> >>16K=16384/768=21.3333 >> >>DBのmeta情報を考えるc21かc22で落ちるはずですが、c30までできたのは >> ちょっ > > >> >>と不 >> >>思議です。 >> > >> > >> > c30まで格納できるのは、お使いのMySQLのバージョンがMySQL 4.0.21である >> ため > > です。 > >> > >> > ヘッダーファイル innobase/include/dict0mem.h を見ますと、MySQL 4.0.21で > > は、 > >> > >> > #define DICT_MAX_COL_PREFIX_LEN 512 >> > >> > と定義されています。 >> > >> > 一方で、MySQL 5.0.18などでは、 >> > >> > /* DICT_MAX_INDEX_COL_LEN is measured in bytes and is the max index > > column > >> > length + 1. Starting from 4.1.6, we set it to < 3 * 256, so that one > > can > >> > create a column prefix index on 255 characters of a TEXT field also in > > the > >> > UTF-8 charset. In that charset, a character may take at most 3 bytes. > > */ > >> > >> > #define DICT_MAX_INDEX_COL_LEN 768 >> > >> > と定義されています。この変更はMySQL 4.1.6に行われたもので、MySQL 4.1 >> 系に > > て > >> > 行われたマルチバイト文字コード対応に伴ったものです。 >> > このコメントにはUTF-8で255文字入れた場合にもExtraDataを使わずに行えるよ > > うに > >> > してあるという説明がなされています。 >> > >> > 英語版マニュアルに書かれている「768バイト」というのはこのMySQL 4.1.6 >> 変更 > > 後を > >> > 前提としているようです。 >> > # http://dev.mysql.com/doc/refman/4.1/en/innodb-restrictions.html >> > # http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html >> > # http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html >> > >> > より古いマニュアルを探すと(公式ではないですが)、512バイトと書いてあり > > ます。 > >> > 何通か前のメールで私が512バイトといったのは、これがあったためです。 >> > (MySQL 4.0.21をお使いとのことでしたので) >> > > > http://linux.ouc.edu.cn/manual/APM/innodb/en/index.html#InnoDB_restrictions > >> > >> > >> >>二、 >> >> >> >> >> >>>#define REC_MAX_DATA_SIZE (16 * 1024) >> >> >> >>を(32*1024)のように修正して32Kまでできないでしょうか。 >> >> >> >>何度もすみません。 >> > >> > >> > innobase/include/rem0rec.hのREC_MAX_DATA_SIZEですが、 >> > >> > /* The data size of record must be smaller than this because we reserve >> > two upmost bits in a two byte offset for special purposes */ >> > #define REC_MAX_DATA_SIZE (16 * 1024) >> > >> > このように「2バイト-2bit分のoffsetにて管理している=14bit分」という説明 > > があります。 > >> > 14bitで表現できる最大値 = 16KBですね。 >> > >> > さらにここを修正するとなると、今のところちょっと私には自信がないです >> (^ > > ^; > >> > >> > >> >>三、 >> >>このようなパラメーターの設定はconfigureのオプションまたは サーバ起動時 > > の > >> >>--defaults-fileの中にした方が便利かなと思っています。 >> > >> > >> > Pageサイズを変えるとibdata1やib_logfile1などのファイルも作り変えなけ >> れば > > >> > ならないでしょう。となると起動時に指定可能にするのは、ちょっとやりす >> ぎか > > もと思います。 > >> > >> > ただしconfigureオプションで指定可能というのはあって然るべきですね。 >> > Feature Requestを出しておきますね。 >> > >> > #よく見るとInnoDBに関するconfigureオプションて、現状だとskip-innodb >> だけ > > ですよね。 > >> > >> > ではでは。 >> > >> > kyou tech wrote: >> > >> >>返事遅くてすみません。 >> >>こっちもUNIV_PAGE_SIZEを64Kに拡張して、コンパイルして >> >>試しました。大体同じ結果を確認しました。 >> >>一、 >> >>text項目にそれぞれ50000Bytesに入れてテストしました。 >> >>そうすると、c30まで登録できました。c31はで139がでました。 >> >>ただ、マニュアルによると >> >>「InnoDB stores the first 768 bytes of a VARCHAR, BLOB, or TEXT column >> >>in the row, and the rest into separate pages. 」 >> >>16K=16384/768=21.3333 >> >>DBのmeta情報を考えるc21かc22で落ちるはずですが、c30までできたのは >> ちょっ > > >> >>と不 >> >>思議です。 >> >> >> >>二、 >> >> >> >> >> >>>#define REC_MAX_DATA_SIZE (16 * 1024) >> >> >> >>を(32*1024)のように修正して32Kまでできないでしょうか。 >> >> >> >>何度もすみません。 >> >> >> >> >> >>三、 >> >>このようなパラメーターの設定はconfigureのオプションまたは サーバ起動時 > > の > >> >>--defaults-fileの中にした方が便利かなと思っています。 >> >> >> >> >> >> >> >> >> >> >> >>>From: Tetsuro IKEDA <tetsuro@xxxxxxxxxx> >> >>>Reply-To: ml@xxxxxxxxxx >> >>>To: ml@xxxxxxxxxx >> >>>Subject: [mysql 12775] Re: Mysql JDBC接続時のサイズ制限 >> >>>Date: Sat, 18 Feb 2006 02:10:03 -0500 >> >>> >> >>>池田です。 >> >>> >> >>>InnoDBのPageサイズを大きくすることで1行辺りのデータサイズの制限を >> >>>緩和する件ですが、仕組みを調べてみようとソースコードを読んでいましたと > > こ > >> >> >> >>ろ、 >> >> >> >> >> >>>以下のような記述を見つけました。 >> >>> >> >>>MySQL 4.0.21 innobase/include/rem0rec.h >> >>> >> >>>/* The data size of record must be smaller than this because we > > reserve > >> >>>two upmost bits in a two byte offset for special purposes */ >> >>>#define REC_MAX_DATA_SIZE (16 * 1024) >> >>> >> >>>この定数なのですが、InnoDBが行サイズを計算するのに使用していると思われ > > る > >> >>>btr_cur_optimistic_insert関数(innobase/btr/btr0cur.c)にて使用され >> てい > > ま > >> >> >> >>す。 >> >> >> >> >> >>>この関数のロジックを読んでみると、どうもこの定数を超える場合には >> >>>"Got error 139 from table handler"のエラー処理を行うように思えました。 >> >>> >> >>>つまりPageサイズを64KBまで拡張したとしても、1行辺りのデータサイズは > > 16KB > >> >>>までしか扱えないのではないかということです。 >> >>> >> >>>これを確かめるべく、Pageサイズを64KBに拡張したMySQL 4.0.21にて、以下の >> >>>SQL文を実行してみましたところ、やはり16KBを超えたところで >> >>>"Got error 139 from table handler"のエラーが返るようになりました。 >> >>> >> >>>create table t1 (c1 blob, c2 blob, c3 blob, c4 blob, c5 blob, c6 blob, > > c7 > >> >> >> >>blob, c8 blob, >> >> >> >> >> >>>c9 blob, c10 blob, c11 blob, c12 blob, c13 blob, c14 blob, c15 blob, > > c16 > >> >> >> >>blob, c17 blob, >> >> >> >> >> >>>c18 blob, c19 blob, c20 blob, c21 blob, c22 blob, c23 blob, c24 blob, > > c25 > >> >> >> >>blob, c26 blob, >> >> >> >> >> >>>c27 blob, c28 blob, c29 blob, c30 blob, c31 blob, c32 blob, c33 blob, > > c34 > >> >> >> >>blob, c35 blob, >> >> >> >> >> >>>c36 blob, c37 blob, c38 blob, c39 blob, c40 blob, c41 blob, c42 blob, > > c43 > >> >> >> >>blob, c44 blob, >> >> >> >> >> >>>c45 blob, c46 blob, c47 blob, c48 blob, c49 blob, c50 blob, c51 blob, > > c52 > >> >> >> >>blob, c53 blob, >> >> >> >> >> >>>c54 blob, c55 blob, c56 blob, c57 blob, c58 blob, c59 blob, c60 blob, > > c61 > >> >> >> >>blob, c62 blob, >> >> >> >> >> >>>c63 blob, c64 blob, c65 blob) type=innodb; >> >>> >> >>>insert into t1 set c1=repeat('A', 512); >> >>> >> >>>update t1 set c2=c1, c3=c1, c4=c1, c5=c1, c6=c1, c7=c1, c8=c1, c9=c1, >> >> >> >>c10=c1, c11=c1, >> >> >> >> >> >>>c12=c1, c13=c1, c14=c1, c15=c1; >> >>> >> >>>まずこれで 512*15=7680バイトを格納します。 >> >>> >> >>>update t1 set c16=c1; >> >>> >> >>>これで8192バイトとなり、8000バイト超となりますがPageサイズが拡張されて >> >>>いる >> >> >> >>ためエラーになり >> >> >> >> >> >>>ません。 >> >>> >> >>>update t1 set c17=c1, c18=c1, c19=c1, c20=c1, c21=c1, c22=c1, c23=c1, >> >> >> >>c24=c1, c25=c1, >> >> >> >> >> >>>c26=c1, c27=c1, c28=c1, c29=c1, c30=c1, c31=c1; >> >>> >> >>>さらにこれで合計 512*31=15872バイトを格納します。ここまではOKです。し >> >>>かし、 >> >> >> >> >> >>>update t1 set c32=c1; >> >>>ERROR 1030: Got error 139 from table handler >> >>> >> >>>16KBに達したところでこのエラーとなってしまいました。 >> >>>この新たに判明した16KB制限でありますが、現在のInnoDBの行構造を改造でも >> >>>しない限り、増やすことは難しいと思います。 >> >>> >> >>>以上、ご参考まで。 >> >>> >> >>> >> >>>Tetsuro IKEDA wrote: >> >>> >> >>>>池田です。こちらの手元のマシンで動作確認を完了しました。 >> >>>> >> >>>>innobase/include/univ.i ファイルを以下のように変更することで、 >> >>>>何通か前に送ったメールではエラーとなっていたものを、 >> >>>>エラー無しにUPDATEすることができました。 >> >>>> >> >>>> >> >>>> >> >>>>>64KBの場合、 >> >>>>> >> >>>>>UNIV_PAGE_SIZE = 8 * 8192 >> >>>>>UNIV_PAGE_SIZE_SHIFT = 16 >> >>>>> >> >>>> >> >>>> >> >>>>【注意点】 >> >>>>この変更を行うと、InnoDBのデータファイル、ログファイル、ログバッファ >> >>> >> >>>など >> >> >> >>の >> >> >> >> >> >>>>設定値がデフォルトのままでは起動しなくなります。 >> >>>>Pageサイズが4倍になっているので、その影響だと思われます。 >> >>>> >> >>>>例えば、以下のように十分な値を設定する必要があります。 >> >>>> >> >>>>--innodb_data_home_dir= >> >>>>--innodb_data_file_path=/foobar/ibdata1:100M:autoextend >> >>>>--innodb_log_file_size=50M >> >>>>--innodb_buffer_pool_size=200M >> >>>> >> >>>>Tetsuro IKEDA wrote: >> >>>> >> >>>> >> >>>>>池田@自己レスです。 >> >>>>> >> >>>>>ちゃんとコメント読め、という感じでした(^^; >> >>>>> >> >>>>>・UNIV_PAGE_SIZE には2の累乗を設定する >> >>>>>・UNIV_PAGE_SIZE_SHIFT にはUNIV_PAGE_SIZEのその2の対数を設定する >> >>>>> >> >>>>>ということですね。 >> >>>>> >> >>>>>つまりPageサイズには48KBのようなサイズは指定できないということです > > ね。 > >> >>>>> >> >>>>>64KBの場合、 >> >>>>> >> >>>>>UNIV_PAGE_SIZE = 8 * 8192 >> >>>>>UNIV_PAGE_SIZE_SHIFT = 16 >> >>>>> >> >>>>>ということになるでしょうか。 >> >>>>> >> >>>>>Tetsuro IKEDA wrote: >> >>>>> >> >>>>> >> >>>>> >> >>>>>>池田です。 >> >>>>>> >> >>>>>>InnoDBのPageサイズを変えるためには、ソースファイルを直接編集した後 > > に、 > >> >>>>>>コンパイルする必要があるようです。 >> >>>>>> >> >>>>>>【変更対象】 >> >>>>>>$MySQL/innobase/include/univ.i >> >>>>>>・UNIV_PAGE_SIZE >> >>>>>>・UNIV_PAGE_SIZE_SHIFT >> >>>>>> >> >>>>>>【参考】 >> >>>>>>http://dev.mysql.com/doc/refman/4.1/en/innodb-restrictions.html >> >>>>>> >> >>>>>>例えばPageサイズを64KBにする場合、UNIV_PAGE_SIZEを"8 * 8192"に変 >> える > > の > >> >> >> >>は >> >> >> >> >> >>>>>>良いとして、UNIV_PAGE_SIZE_SHIFTはどう変更するのがいいんでしょうか > > ね。 > >> >>>>>> >> >>>>>>考え中・・・。もし分かったら教えてください(^^) >> >>>>>> >> >>>>>>kyou tech wrote: >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>>>だいぶ解ったような気がします。丁寧なご説明に感動しました。 >> >>>>>>>mysqlの醍醐味も感じ始めています。 >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>2.コンパイルオプションを指定してInnoDBのPageサイズをデフォル >> トの > > >> >> >> >>16KBか >> >> >> >> >> >>>>>>>ら、 >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>> もっと大きな値にする(最大で64KBまで指定可能)。 >> >>>>>>>> (64KBにすることで制限は8KBから32KBに緩和される。) >> >>>>>>> >> >>>>>>>で試したいと思います。 >> >>>>>>>ただ、configure --helpで見るとpage sizeのオプションがないようです > > が、 > >> >>>>>>>直接configureファイルを修正することになるでしょうか。 >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>From: Tetsuro IKEDA <tetsuro@xxxxxxxxxx> >> >>>>>>>>Reply-To: ml@xxxxxxxxxx >> >>>>>>>>To: ml@xxxxxxxxxx >> >>>>>>>>Subject: [mysql 12769] Re: Mysql JDBC接続時のサイズ制限 >> >>>>>>>>Date: Thu, 16 Feb 2006 22:04:00 -0500 >> >>>>>>>> >> >>>>>>>>池田@Connector/Jチームにてインターン中です。 >> >>>>>>>> >> >>>>>>>>まず確認したいのですが、使用しているストレージエンジンはInnoDB >> で宜 > > し > >> >> >> >>いで >> >> >> >> >> >>>>>>>しょうか? >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>さて、InnoDB前提で考えた場合、ちょっと説明が長くなりますが、以 >> 下私 > > の > >> >> >> >>予 >> >> >> >> >> >>>>>>>>想で >> >>>>>>> >> >>>>>>>す。 >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>【InnoDBにおける行サイズのデフォルトの最大値(約8000バイト)を超え >> >>> >> >>>たの >> >> >> >>が原 >> >> >> >> >> >>>>>>>因】 >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>InnoDBはテーブルのデータを格納する領域であるTable Spaceを、デフォ >> >>> >> >>>ルト >> >> >> >>では >> >> >> >> >> >>>>>>>16KB >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>(これはコンパイル時に指定されます)のPage単位に分割して管理してお >> >>> >> >>>り、 >> >> >> >> >> >>>>>>>>それぞれのPage内に各行を"主キーでソートした状態"で格納していま >> す。 > > >> >>>>>>>>(InnoDBにおけるClustered Index) >> >>>>>>>> >> >>>>>>>>これに関連して、InnoDBでは各行の最大長はPageサイズの半分以下で >> ある > > こ > >> >>>>>>>>と、と >> >>>>>>> >> >>>>>>>いう >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>制限があります。デフォルトのPageサイズ16KBにおいては、8KBがこれに >> >>> >> >>>当た >> >> >> >>りま >> >> >> >> >> >>>>>>>す。 >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>しかしInnoDBでは、InnoDBではTEXT(LONGTEXT)やBLOB(LONGBLOB) >> を使 > > 用 > >> >> >> >>する >> >> >> >> >> >>>>>>>と、 >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>該当データをその行が可能されているPageの外に格納することができ >> るた > > >> >> >> >>め、 >> >> >> >> >> >>>>>>>>実際には最大4GBまでの行を格納することができます。 >> >>>>>>>> >> >>>>>>>>ただし、例えば以下のDDLがあり、 >> >>>>>>>> >> >>>>>>>>CREATE TABLE t1 (c1 TEXT) TYPE=InnoDB; >> >>>>>>>> >> >>>>>>>>以下のDMLが実行されたとすると、 >> >>>>>>>> >> >>>>>>>>INSERT INTO t1 SET c1 = REPEAT('A', 10000); >> >>>>>>>> >> >>>>>>>>行が格納されているPageにはカラムc1の先頭512バイトが格納され、 >> >>>>>>>>Page外に格納されるのは、残りの10000-512=9488バイトとなります。 >> >>>>>>>> >> >>>>>>>>すなわち、この残りの9488バイトについては何も問題は無いのですが、 >> >>>>>>>>先頭512バイト分については行が格納されているPage内に格納されるた > > め、 > >> >>>>>>>>例えばこのc1のようなカラムが複数存在する場合には、Page内に合計で >> >>>>>>>>格納されるデータサイズが8000バイトを超えてしまい、今回生じてい >> るよ > > う > >> >> >> >>な、 >> >> >> >> >> >>>>>>>>Got error 139 from table handler >> >>>>>>>> >> >>>>>>>>というエラーがInnoDBから投げられてしまうということになります。 >> >>>>>>>> >> >>>>>>>>例えば以下のようなDDLおよびDMLを実行してみると分かりやすいでしょ > > う。 > >> >>>>>>>> >> >>>>>>>>mysql> create table many_text(a text, b text, c text, d text, e >> >> >> >>text, f >> >> >> >> >> >>>>>>>text, g >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>text, h text, i text, j text, k text, l text, m text, n text, o >> >> >> >>text, p >> >> >> >> >> >>>>>>>text) >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>type=innodb; >> >>>>>>>> >> >>>>>>>>mysql> insert into many_text set a = repeat('.', 512); >> >>>>>>>> >> >>>>>>>>mysql> update many_text set >> >>>>>>>>b=a,c=a,d=a,e=a,f=e,g=a,h=a,i=a,j=a,k=a,l=a,m=a,n=a,o=a; >> >>>>>>>> >> >>>>>>>>mysql> update many_text set >> >>>>>>>>b=a,c=a,d=a,e=a,f=e,g=a,h=a,i=a,j=a,k=a,l=a,m=a,n=a,o=a,p=a; >> >>>>>>>>ERROR 1030: Got error 139 from table handler >> >>>>>>>> >> >>>>>>>>となると、今回の問題の回避方法ですが、以下の2つのどちらかではない >> >>> >> >>>かと >> >> >> >> >> >>>>>>>>思われ >> >>>>>>> >> >>>>>>>ます。 >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>1.DDLを変更して8000バイト以上のデータがPage内に入らないようにす >> >>> >> >>>る。 >> >> >> >> >> >>>>>>>> 例:テーブルを分割する、行を統合するなど >> >>>>>>>> >> >>>>>>>>2.コンパイルオプションを指定してInnoDBのPageサイズをデフォル >> トの > > >> >> >> >>16KBか >> >> >> >> >> >>>>>>>ら、 >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>> もっと大きな値にする(最大で64KBまで指定可能)。 >> >>>>>>>> (64KBにすることで制限は8KBから32KBに緩和される。) >> >>>>>>>> >> >>>>>>>>以上です。 >> >>>>>>>> >> >>>>>>>>皆様、何か補足などありましたら宜しくお願いいたします。 >> >>>>>>>> >> >>>>>>>>kyou tech wrote: >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>>>池田さん >> >>>>>>>>> >> >>>>>>>>>ご返事ありがとうございます。 >> >>>>>>>>>対象テーブルは130項目があって、50項目ぐらいはTEXT型です。 >> >>>>>>>>>中でfull size10000Byte項目が一個、5000Byte、3000Byte項目が若干あ >> >>> >> >>>りま >> >> >> >> >> >>>>>>>>す。 >> >>>>>>> >> >>>>>>> >> >>>>>>>>>full sizeのレコード長は105KBぐらいです。 >> >>>>>>>>>もともとMysqlのTextの上限は65535Byteと認識していますから、 >> >>>>>>>>>個々のフィールドの制限違反よりは、 >> >>>>>>>>>Mysql(4.0.21)の行のサイズに制限があるような感じしています。 >> >>>>>>>>>本当にそうでしょうか。もしそうであれば、どこかの設定を修正するか >> >>> >> >>>(そ >> >> >> >>う >> >> >> >> >> >>>>>>>>>願って >> >>>>>>>>>います)、 >> >>>>>>>>>まさかテーブル分割することになるでしょうか。 >> >>>>>>>>>今回始めてMysqlを使うことで、無知な質問ばかりですみません。 >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>>>From: Tetsuro IKEDA <tetsuro@xxxxxxxxxx> >> >>>>>>>>>>Reply-To: ml@xxxxxxxxxx >> >>>>>>>>>>To: ml@xxxxxxxxxx >> >>>>>>>>>>Subject: [mysql 12767] Re: Mysql JDBC接続時のサイズ制限 >> >>>>>>>>>>Date: Thu, 16 Feb 2006 07:07:24 -0500 >> >>>>>>>>>> >> >>>>>>>>>>池田です。 >> >>>>>>>>>> >> >>>>>>>>>>Connector/J(MySQL JDBC Type4 Driver)でStatementあるいはClient- >> >>> >> >>>Side >> >> >> >>の >> >> >> >> >> >>>>>>>>>>PreparedStatementを使用する場合の送信可能なクエリの最大長は >> 2GBで > > >> >> >> >>す。 >> >> >> >> >> >>>>>>>>>>(普通はそれよりも先にJVMのHEAPサイズが事実上の制限になると思い > > ま > >> >> >> >>す) >> >> >> >> >> >>>>>>>>>>Connector/Jに限らず、MySQLの全ての種類のクライアントは16MBを >> 超え > > る > >> >>>>>>>> >> >>>>>>>>SQL文 >> >>>>>>> >> >>>>>>>に >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>>>ついては、複数のPacketに分割してサーバへ送信します。 >> >>>>>>>>>>max_allowed_packetは20MBに設定しているということですので、 >> >>>>>>>>>>これが原因ということも無いと思います。 >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>>>|java.sql.SQLException: Got error 139 from table handler >> >>>>>>>>>> >> >>>>>>>>>>こちらのエラーをPerrorで見るに、 >> >>>>>>>>>> >> >>>>>>>>>>D:\mysql\mysql-4.0.26-win32\bin>perror 139 >> >>>>>>>>>>MySQL error: 139 = Too big row >> >>>>>>>>>> >> >>>>>>>>>>これはConnector/Jが作成したエラーではなく、 >> >>>>>>>>>>サーバから"Too big row"というメッセージでエラーが返ってきたこと >> >>> >> >>>を意 >> >> >> >>味 >> >> >> >> >> >>>>>>>>>>してい >> >>>>>>>>> >> >>>>>>>>>ます。 >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>>>何か思い当たる節はありませんか? >> >>>>>>>>>> >> >>>>>>>>>>kyou tech wrote: >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>>>質問内容曖昧ですみません。 >> >>>>>>>>>>>実は >> >>>>>>>>>>>画面上の各項目をfull sizeで入力して登録すると >> >>>>>>>>>>>下記のエラーが発生しています。 >> >>>>>>>>>>>各項目を小さいサイズで入力するとうまく登録できます。 >> >>>>>>>>>>>full sizeでのレコードの長さ:100KB >> >>>>>>>>>>>一応mysql server(4.0.21) の >> >>>>>>>>>>>max_allowed_packet >> >>>>>>>>>>>max_heap_table_sizeをそれぞれ20MBと32MBに調整したが、 >> >>>>>>>>>>>同じくエラーが出ていますので、 >> >>>>>>>>>>>jdbcのクエリーの長さに制限があるかと思っています。 >> >>>>>>>>>>>ご教授いただければ助かります。 >> >>>>>>>>>>> >> >>>>>>>>>>>|java.sql.SQLException: Got error 139 from table handler >> >>>>>>>>>>>| at >> >>>>>>> >> >>>>>>>com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2921) >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>>>>| at > > com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570) > >> >>>>>>>>>>>| at >> >> >> >>com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665) >> >> >> >> >> >>>>>>>>>>>| at >> >> >> >>com.mysql.jdbc.Connection.execSQL(Connection.java:2978) >> >> >> >> >> >>>>>>>>>>>| at >> >> >> >>com.mysql.jdbc.Connection.execSQL(Connection.java:2902) >> >> >> >> >> >>>>>>>>>>>| at >> >>>>>>>>>>> >> >>>>>>> >> >>>>>>>> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja >>>>>>>> > > >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>>>>va:930) >> >>>>>>>>>>>| at >> >>>>>>>>>>> >> >>>>>>> >> >>>>>>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java >>>>>>>> > > >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>>>>:1159) >> >>>>>>>>>>>| at >> >>>>>>>>>>> >> >>>>>>> >> >>>>>>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java >>>>>>>> > > >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>>>>:1076) >> >>>>>>>>>>>| at >> >>>>>>>>>>> >> >>>>>>> >> >>>>>>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java >>>>>>>> > > >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>>>>:1061) >> >>>>>>>>>>>| at >> >>>>>>>>>>> >> >>>>>>> >> >>>>>>>> org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdat >>>>>>>> > > >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>>>>e(Unknown Source) >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>>>| at >> >>>>>>>>>>>> >> >>>>>>> >> >>>>>>>> com.sony.framework.util.sqltemplate2.UpdateSQLCommand.runStatement(Up >>>>>>>> > > >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>>>>>dateSQLCommand.java:65) >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>>>From: Tetsuro IKEDA <tetsuro@xxxxxxxxxx> >> >>>>>>>>>>>>Reply-To: ml@xxxxxxxxxx >> >>>>>>>>>>>>To: ml@xxxxxxxxxx >> >>>>>>>>>>>>Subject: [mysql 12765] Re: Mysql JDBC接続時のサイズ制限 >> >>>>>>>>>>>>Date: Thu, 16 Feb 2006 05:43:19 -0500 >> >>>>>>>>>>>> >> >>>>>>>>>>>>こんにちは。池田です。 >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>>>Mysql JDBC接続時のサイズ制限(stateMentの長さ)があります >> か。 > > >> >>>>>>>>>>>>>もしあれば、どうやって調整(設定)しますでしょうか。 >> >>>>>>>>>>>> >> >>>>>>>>>>>>java.sql.Statementを使う場合にサーバに送信できるクエリの最 >> 大長 > > に > >> >>>>>>>> >> >>>>>>>>つい >> >>>>>>> >> >>>>>>>て >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>>>>の >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>>>>>ご質問でしょうか? >> >>>>>>>>>>>> >> >>>>>>>>>>>>質問の意図をもう少し詳しく教えてください。 >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>>-- >> >>>>>>>>>>>>Tetsuro Ikeda, Intern Development & Support >> >>>>>>>>>>>>MySQL Inc, www.mysql.com >> >>>>>>>>>>>>Office: +1-206-336-2030 Mobile: +1-206-661-4293 >> >>>>>>>>>>>>Are you MySQL certified? www.mysql.com/certification >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>>> _________________________________________________________________ >>>>>>>>>>>> > > >> >>>>>>>>>>>迷惑メールやウイルスへの対策も万全「MSN Hotmail」 >> >>>>>>>>>>>http://promotion.msn.co.jp/hotmail/ >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>>-- >> >>>>>>>>>>Tetsuro Ikeda, Intern Development & Support >> >>>>>>>>>>MySQL Inc, www.mysql.com >> >>>>>>>>>>Office: +1-206-336-2030 Mobile: +1-206-661-4293 >> >>>>>>>>>>Are you MySQL certified? www.mysql.com/certification >> >>>>>>>>>> >> >>>>>>>>> >> >>>>>>>>>> _________________________________________________________________ >> >> >>>>>>>>>パソコンでも携帯電話でも使える 「MSN Hotmail」 >> >>>>>>>>>http://promotion.msn.co.jp/hotmail/ >> >>>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>>-- >> >>>>>>>>Tetsuro Ikeda, Intern Development & Support >> >>>>>>>>MySQL Inc, www.mysql.com >> >>>>>>>>Office: +1-206-336-2030 Mobile: +1-206-661-4293 >> >>>>>>>>Are you MySQL certified? www.mysql.com/certification >> >>>>>>>> >> >>>>>>> >> >>>>>>>_________________________________________________________________ >> >>>>>>>MSNショッピングでXbox360を早速チェック! >> >>>>>>>http://shopping.msn.co.jp/softcontent/softcontent.aspx?scmId=593 >> >>>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> >>>> >> >>> >> >>>-- >> >>>Tetsuro Ikeda, Intern Development & Support >> >>>MySQL Inc, www.mysql.com >> >>>Office: +1-206-336-2030 Mobile: +1-206-661-4293 >> >>>Are you MySQL certified? www.mysql.com/certification >> >>> >> >> >> >>_________________________________________________________________ >> >>MSNショッピングでXbox360を早速チェック! >> >>http://shopping.msn.co.jp/softcontent/softcontent.aspx?scmId=593 >> >> >> >> >> > >> > >> > >> >> >> -- >> Tetsuro Ikeda, Intern Development & Support >> MySQL Inc, www.mysql.com >> Office: +1-206-336-2030 Mobile: +1-206-661-4293 >> Are you MySQL certified? www.mysql.com/certification >> > > _________________________________________________________________ > MSNショッピングでXbox360を早速チェック! > http://shopping.msn.co.jp/softcontent/softcontent.aspx?scmId=593 > -- Tetsuro Ikeda, Intern Development & Support MySQL Inc, www.mysql.com Office: +1-206-336-2030 Mobile: +1-206-661-4293 Are you MySQL certified? www.mysql.com/certification
12763 2006-02-16 13:49 ["Matsunobu, Yoshinor] Re: MySQL のバックアップ・復元について 12764 2006-02-16 17:24 ┣["kyou tech" <kyou_te] Mysql JDBC接続時のサイズ制限 12765 2006-02-16 19:43 ┃┗[Tetsuro IKEDA <tetsu] 12766 2006-02-16 20:18 ┃ ┗["kyou tech" <kyou_te] 12767 2006-02-16 21:07 ┃ ┗[Tetsuro IKEDA <tetsu] 12768 2006-02-17 10:37 ┃ ┗["kyou tech" <kyou_te] 12769 2006-02-17 12:04 ┃ ┗[Tetsuro IKEDA <tetsu] 12770 2006-02-17 14:32 ┃ ┗["kyou tech" <kyou_te] 12771 2006-02-17 15:02 ┃ ┗[Tetsuro IKEDA <tetsu] 12772 2006-02-17 15:15 ┃ ┗[Tetsuro IKEDA <tetsu] 12773 2006-02-17 16:42 ┃ ┗[Tetsuro IKEDA <tetsu] 12775 2006-02-18 16:10 ┃ ┗[Tetsuro IKEDA <tetsu] 12776 2006-02-19 21:08 ┃ ┗["kyou tech" <kyou_te] 12777 2006-02-20 04:06 ┃ ┗[Tetsuro IKEDA <tetsu] 12778 2006-02-20 06:43 ┃ ┗[Tetsuro IKEDA <tetsu] 12779 2006-02-20 14:51 ┃ ┗["kyou tech" <kyou_te] -> 12780 2006-02-20 15:01 ┃ ┗[Tetsuro IKEDA <tetsu] 12781 2006-02-20 15:37 ┃ ┗["kyou tech" <kyou_te] 12782 2006-02-20 15:45 ┃ ┗[Tetsuro IKEDA <tetsu] 12774 2006-02-17 17:59 ┗[baya <bayapbayap@xxx]