のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,312人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレMySQL 総合 Part15

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    51 : NAME IS - 2008/12/09(火) 01:42:14 ID:??? (+30,+7,-3)
    関数つくればいいんじゃね?
    52 : NAME IS - 2008/12/10(水) 17:03:55 ID:??? (+3,-30,-109)

    MySQL5の限界を上げたいのですが、どこをチューニングしればいいのか教えてください。
    基本的なチューニングは出来てると思います。

    サーバーは、DB専用で4CPU メモリ8GB

    max_connections 許容接続数 2000 本
    Max_used_connections 過去発生した最大接続数 916 本
    (mysql接続のみの数字)

    916本で、MySQLに接続が出来なくなってしまいます。
    これを2000まで持って行きたいのです。

    CPUやメモリは、余裕があります。

    アドバイスを下さい。神様。
    53 : NAME IS - 2008/12/10(水) 19:41:16 ID:??? (-1,-29,-48)
    OSの種類とバージョン
    MySQLのバージョン
    32bit/64bit
    ulimit -aの出力
    917本目をつなごうとしたときのエラーメッセージ

    ぐらいは書かないと神様でも分からないと思うよ
    54 : NAME IS - 2008/12/10(水) 19:55:29 ID:??? (+3,-30,-164)
    そうですよね。。
    OSはdebian Etch 64bit
    Linux db 2.6.18-6-amd64 #1 SMP Fri Oct 10 05:11:18 UTC 2008 x86_64 GNU/Linux

    サーバー側:MySQL5.0.32-Debian_7etch8-log
    クライアント側:MySQL5.0.32


    エラーは出てないですが、WEBサーバーから接続が出来なくなってしまいます。
    しばらくしたら、接続出来るようになるのですが・・。

    まず、MySQLへの接続なしで、負荷ツールで負荷をかけても問題なく処理されるのですが、
    MySQLへの接続をすると、しばらくして接続が出来なくなります。

    Apache2とMySQL5のサーバーは物理的に分かれています。
    55 : NAME IS - 2008/12/10(水) 20:58:17 ID:??? (+3,-30,+0)
    max_connectionsを増やすときは、open_files_limitも増やす必要がある。

    sql/mysqld.cc
    static int init_common_variables(

     max_open_files= max(max(wanted_files, max_connections*5), open_files_ 
     files= my_set_max_open_files(max_open_files);
     /* ↑ここでulimitのopen files制限に引っかかるなどしてしまうと */
     if (files < wanted_files) {
      if (!open_files_limit) {
       max_connections= (ulong) min(files-10-TABLE_OPEN_CACHE_MIN*2, max_connections);
       /* ↑ ここでmax_connectionsを減らされてしまう。

    mysqldのログでこんなのが出てないかも確認してみて。
    [Warning] Changed limits: max_open_files: 1024 max_connections: 886 table_cache: 64

    でもデータベースに900接続って時点でわりと異常なので
    アプリケーションがきちんと切断してるかも確認してください。
    56 : NAME IS - 2008/12/10(水) 22:05:22 ID:??? (+4,-30,-137)
    ありがとうございます。

    早速、ログを見てみましたけど、何も吐き出されてませんでした。

    負荷ツールを使ってデータを取ってみたのですが、下記のコマンドで1800まで行って、実際にDBへ繋げたのが140まで下がってきた所でした。
    #netstat -an | wc -l 
    1800


    もしかして、何か根本的におかしいのかな。

    アプリ側では、明示的に切断はしてませんが、、スクリプトが終われば、勝手に切断されるんですよね??
    PHPとPDOで接続しています。

    あと、よく分かりませんが、
    Max_used_connections 過去発生した最大接続数 1786 本 まで行きました。
    けど、ページが表示されない・・待ちの状態で、DB接続出来なくタイムアウトに。

    なんでしょうね・・。
    57 : NAME IS - 2008/12/10(水) 23:21:53 ID:??? (+3,-30,-52)
    色々調べてみましたが、netstat -anのコマンドで見てみると「ESTABLISHED」だらけになってました。

    #netstat -an | wc -l で 140以下になればうまく接続出来るようです。

    58 : NAME IS - 2008/12/11(木) 03:42:57 ID:??? (+17,-15,-96)
    linux同士でレプリケーションをしているときに、
    cronで同期ができているかどうかをチェックするにはどのようにすればいいでしょうか?
    レプリケーションができているかどうかを
    シェルスクリプトから確認するにはどのように行えばいいでしょうか?
    59 : NAME IS - 2008/12/11(木) 13:37:08 ID:??? (+0,-28,-24)

    自己レスです

    >>56
    WEBサーバーからDBサーバーへ接続が出来ないときでも、
    DBサーバーからMySQLへアクセスする事が出来ました。

    恐らく、ネットワーク周りが原因なのかなぁと。
    60 : NAME IS - 2008/12/11(木) 14:17:19 ID:??? (+0,-29,-25)

    質問ばかりですいません・・。

    mytop で見てると、Userが「unauthent」になっているのが多いのですが、これはどういう意味なのでしょうか?
    62 : NAME IS - 2008/12/12(金) 11:12:54 ID:??? (+3,-30,-110)
    AUTO_INCREMENTでPRIYMARY KEYである行(行の名前はid)を追加するSQLを
    下記のように組みました。

    alter table input add column input int PRIYMARY KEY(id) AUTO_INCREMENT;

    上記だとエラーだとになります。どこがおかしいのでしょうか?
    ぐぐってみてもわからないので質問させていただきました。ご教授頂ければ
    幸いです。
    63 : 0 - 2008/12/12(金) 11:27:07 ID:??? (-2,-30,-22)
    タイポがありました。正しくは
    alter table input add column input int PRIMARY KEY(id) AUTO_INCREMENT;
    です。
    64 : NAME IS - 2008/12/12(金) 12:17:36 ID:??? (-13,-30,-202)
    >>60
    back_log関係あるかなあ?

    >>61
    Windowsだったら全部utf8ではダメ。以下の設定が基本。
    | character_set_client | cp932 |
    | character_set_connection | cp932 |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | cp932 |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    66 : NAME IS - 2008/12/12(金) 19:41:04 ID:??? (+3,-30,-70)
    [mysqld]
    character_set_server = utf8

    [client]
    default_character_set = cp932

    ねんのため一回データベースとテーブルつくりなおしてみて。
    68 : NAME IS - 2008/12/13(土) 00:54:19 ID:??? (+68,+29,-61)
    スロークエリを吐くこと自体の負荷は
    100MBのファイルに100バイト追記するのも
    1KBのファイルに100バイト追記するのも変わらんよ。

    それはおいといて、
    スロークエリログが100MBも出るってことは
    そもそもチューニングされてないってことだよね。
    そのデータベースは遅いだろうね。
    69 : NAME IS - 2008/12/13(土) 01:12:14 ID:??? (+69,+29,-52)
    >68
    ありがとうございます。
    となると、150MBのslow.logを消した昨日辺りから妙に動作が軽いのは
    ログのサイズには無関係か……


    >100MBも出るってことは
    ですよねぇ。

    パソコンに詳しいからと言う理由で唐突にサーバ管理を任されてしまい
    どこからメンテナンスすればいいものか……。
    70 : NAME IS - 2008/12/14(日) 02:34:41 ID:??? (+3,-30,-99)
    どなたかお助けください。

    max_allowed_packetを4Mにセットした上で、マルチプルインサートを使って
    9000件程度のデータを4MB弱のSQL文にまとめて実行しているのですが
    Packets larger than max_allowed_packet are not allowed.エラーが
    出てしまいます。

    登録すべきデータ件数が多いので、出来るだけまとめて登録したいのですが
    SQL文が実際にはどのくらいのパケットサイズになるかを見積もるには
    どうすればよいのでしょうか? どこまで削れば通るのか皆目見当がつかないもので…orz
    71 : NAME IS - 2008/12/14(日) 05:45:22 ID:??? (+0,-29,-19)
    max_allowed_packet を 100M とか設定して、通るまで減らしてみたらだめなの ?
    72 : NAME IS - 2008/12/14(日) 11:03:09 ID:??? (+2,-30,-200)
    >>71
    ご指摘ありがとうございます。データ総数が100万件を軽く超えるので
    少しでも高速化するため、プログラム内でmax_allowed_packet値を取得して、
    それと見比べながらSQL文を構築、限界まで伸ばしてから実行、という
    手順を取っています。全件つなげても流石に100MBは行かないと思いますが
    限られた範囲で頑張れたらなぁ、と。わがままなのですが。

    なお、SQL文を短くするほうで試してみましたところ、
    9215件分の 3,825,253byte のSQL文は通りましたが、
    9425件分の 3,911,372byte はだめでした。max 4,194,304byte に対して
    300KB近くの余裕が必要ということで、MySQL内部での処理時には1件毎に
    何らかのヘッダが付いて処理されていると推測しています(流石にSQL
    1文に300KBは無いと)。で、そのヘッダサイズが分かれば解決!と
    思っているのですが、そもそもこの考えが正しいのか皆目見当が付きません。
    MySQL内部でのパケット構造はググってもなかなか見つからないもので
    引き続きお知恵をお貸しいただければ幸いです。
    73 : NAME IS - 2008/12/14(日) 13:29:40 ID:??? (+57,+29,-19)
    そこまでするなら、パケットダンプして確認してみたら?
    74 : NAME IS - 2008/12/14(日) 15:10:59 ID:??? (-1,-29,-46)
    そのまえに50件ずつINSERTするのと5000件ずつINSERTするので
    どれだけ性能差があるのか測ってみたら?

    一般的には10~100件あたりに最適値があるんだぞ
    75 : NAME IS - 2008/12/15(月) 17:21:29 ID:??? (+17,-30,-150)
    質問です。

    mysql4.1までテーブルを作った際に、
    数値型のカラムのデフォルト値は、明示しなくても0になりましたが、
    現在試している5.0.67ではデフォルト値がNULLになってしまいます。
    これは5.0からは明示しなければいけない仕様に変わったんでしょうか?
    テーブル作成クエリの例と作成したカラムの内容は以下のとおりになります。

    クエリ
    create table test_table( col int not null );
    カラム内容
    +-------+---------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | col | int(11) | NO | | NULL | |
    +-------+---------+------+-----+---------+-------+

    すみませんが、どなたか教えていただけますよう、よろしくお願いいたします。
    76 : NAME IS - 2008/12/15(月) 19:01:03 ID:??? (+7,-30,-63)
    sourceコマンドで大量のinsert文を入れてるんだけど
    1行目だけ必ずエラーが出る
    その1行目を手動で入れるとエラーは出ない
    2行目以降は全て正常に入る

    なんだろう?
    UTF-8に統一しててエンコード問題でもないと思うんだけど
    77 : NAME IS - 2008/12/15(月) 21:36:40 ID:??? (-6,-29,-1)
    T字型ER手法がメジャー
    78 : NAME IS - 2008/12/15(月) 22:36:59 ID:??? (+52,+14,-5)
    >>75
    SQLモードによるんだそうだ。
    http://dev.mysql.com/doc/refman/5.1/ja/data-type-defaults.html

    >>76
    BOMがついてるとか?
    ためしてないけど
    79 : 75 - 2008/12/16(火) 13:26:55 ID:??? (+65,+29,-9)
    >>78
    ありがとうございます。
    どの環境でも同じように使うには、
    面倒ですが、デフォルト値は明示したほうがよさそうですね。
    80 : NAME IS - 2008/12/16(火) 14:03:07 ID:??? (+7,-29,-33)
    develとかserverとかclientとかあるけど具体的な違いってなんなの?
    81 : NAME IS - 2008/12/16(火) 14:27:31 ID:??? (+58,+29,-19)
    >>80
    名前の通り。そのまんまの用途だと気づけ。
    82 : NAME IS - 2008/12/16(火) 15:29:50 ID:??? (+59,+29,-47)
    用途の違いは分かるけど具体的な機能の違いはなんなの?って聞いてるの
    83 : NAME IS - 2008/12/16(火) 18:04:26 ID:??? (+52,+24,-11)
    全文検索で、特定のレコードだけインデックスしないって出来る?
    84 : NAME IS - 2008/12/16(火) 21:05:36 ID:??? (+5,-29,-31)
    >>82
    clientはサーバになれないし、develがないと MySQL ライブラリを使用するプログラムをコンパイルできない。

    MySQL全体を用途毎にわけただけ。
    85 : NAME IS - 2008/12/16(火) 22:16:11 ID:??? (+14,-30,-97)
    mysql5.01のバッチモードにて、あるテーブルに条件にあるデータが入っていた場合、後続バッチを強制中止させたいのですが。
    select 1/count(*) from hoge;
    として、レコード0の場合もエラーになりません・・・
    set session sql_mode='STRICT_ALL_TABLES';も、insert/updateにしか0除算エラーにしてくれないらしく困っています。

    なにかselectでエラーとして中止させる良い方法は無いでしょうか。
    86 : NAME IS - 2008/12/16(火) 22:49:31 ID:??? (+0,-30,-31)
    >>85
    http://forums.mysql.com/read.php?99,55108,55108#msg-55108
    なんかUDFつかえとかちょっとトリッキーみたい。
    素直にストアド書くか、C/Perl/Javaとかで書いたほうがよさそう?
    87 : 85 - 2008/12/17(水) 11:06:00 ID:??? (+3,-29,-77)
    >>86
    ユーザ定義関数からraiseですか。
    割とどんな事でもクエリが落ちない仕様っていうのは、mysqlの利点にもなってるのでしょうね・・・

    >素直にストアド書くか、C/Perl/Javaとかで書いたほうがよさそう?

    ですねぇ。
    ありがとうございました。
    88 : NAME IS - 2008/12/17(水) 14:35:32 ID:??? (+62,+29,-77)
    これはどういう意味?組み合わせアルゴリズムってjoinの事?

    http://dev.mysql.com/doc/refman/5.1/ja/view-restrictions.html
    組合せアルゴリズムを使用して処理されたビューに、
    インデックスを使うことは可能です。
    しかし、誘導可能なアルゴリズムで処理されたビューは、
    その背後にあるテーブルのインデックスを活用することができません
    ( 一時テーブルの作成中にインデックスを使用することはできます ) 。
    89 : NAME IS - 2008/12/17(水) 15:05:46 ID:??? (+57,+29,-9)
    index関係調べてるとmysqlなんて使うべきじゃなかったと後悔するな・・・
    90 : NAME IS - 2008/12/17(水) 15:15:57 ID:??? (+62,+29,-81)
    userテーブルにprofileフィールドやareaフィールドやcategoryフィールドがあったとして
    3つ全て別のテーブルへの参照だったとする
    この場合、それら3つのフィールドへの全文検索を行うにはどうするか?

    正規化したらindex使えなくなるとか無いだろ・・・
    他のRDBMSはビューに対してインデックス張れたり
    オプティマイザがもっと賢かったりインデックスが強力だったり
    こういうところで躓かない高機能さがある
    91 : NAME IS - 2008/12/17(水) 15:18:05 ID:??? (+4,-29,-104)
    たぶん最善案はprofile,area,category全部に個別に全文インデックス張って
    3つサブクエリ発行して積集合を求める方法
    他のRDBMSの3倍+α(積集合負荷)の処理時間になりそう

    あー
    92 : NAME IS - 2008/12/17(水) 15:41:54 ID:??? (+5,-23,-42)
    >>91の方法でもクエリされたキーワード(AND)全部含んでないと該当しないから
    結局複数テーブル間の検索は出来ないわw

    おわった
    93 : NAME IS - 2008/12/17(水) 15:44:20 ID:??? (+57,+29,-27)
    積集合じゃなくて和集合じゃないか?
    オプティマイザがタコいのには狂おしいほど同意するけど
    94 : NAME IS - 2008/12/17(水) 16:05:54 ID:??? (+62,+29,-100)
    と言うか、結合後のテーブルに対してインデックス出来ないとダメ
    テーブルをまたいだインデックスを張れるか、
    ビューに対してインデックスを張れないといけない
    MySQLには探したところそういった機能は無い(代替になるようなものも)

    正規化を崩してパフォーマンスを求める場合がある、と言われる典型的な例だと思う。
    MySQLではareaテーブルとか作っちゃいけないんだよ。
    95 : NAME IS - 2008/12/17(水) 16:07:50 ID:??? (+57,+29,-23)
    昔からある問題のはずなのに未だ解決されてないところを見ると
    MySQL自体使わないほうが良いと思ったわ
    開発停滞してるだろこれ
    96 : NAME IS - 2008/12/17(水) 17:28:57 ID:??? (+57,+29,-32)
    新機能の不具合が多すぎて
    パフォーマンスまで手が回ってないんだよ。
    97 : NAME IS - 2008/12/17(水) 17:40:55 ID:??? (+57,+29,-22)
    MySQLって確かC言語(笑)で実装されてるよね
    そりゃ開発も停滞するわ
    そんなもん普及させるなよな・・・
    98 : NAME IS - 2008/12/17(水) 17:58:35 ID:??? (+2,-25,-65)
    いや、Cなら普通では。PostgreSQLもCですよ?

    MySQLはCとC++のハイブリッド。
    ソースを見てグローバル変数のすさまじい数に絶望するといいよ!
    100 : NAME IS - 2008/12/18(木) 09:57:44 ID:??? (+4,-30,-109)
    できた

    mysql> update q99 set col2 = (select ename from emp where empno = 7788);
    Query OK, 1 row affected (0.15 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

    mysql> select * from q99;
    +------+-------+
    | col1 | col2 |
    +------+-------+
    | 1 | scott |
    +------+-------+
    1 row in set (0.00 sec)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について