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

    私的良スレ書庫

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

    元スレMySQL 総合 Part18

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - megab + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    952 : NAME IS - 2011/01/09(日) 18:01:07 ID:??? (+19,+29,-10)
    普通は3番でも、>>946がやる3番は、何か違うものになりそうな気がする・・・
    953 : NAME IS - 2011/01/10(月) 17:10:38 ID:??? (+22,+28,+0)
    >>944
    実は必須ではないんだぜ。
    960 : NAME IS - 2011/01/13(木) 11:57:37 ID:??? (-2,+0,-15)
    こういう時に left join 使えばいいんですね…。
    962 : NAME IS - 2011/01/14(金) 11:04:06 ID:uJ5LUOx7 (+59,+29,-176)
    バッチで30個のテーブルに1万件ずつほどのデータを登録しようと思っています。
    バッチで登録処理を行なっている間も他のプログラムからテーブルへの
    参照が行われる事が考えられるのでトランザクションを貼ろうと考えていますが、
    beginをバッチの開始直後,commitをバッチの終了時に行うと
    凄くパフォーマンスが悪いように思えます。
    テーブル単位でトランザクションを貼ると、
    他のプログラムから参照を行ったときに
    テーブル間のデータの不整合が発生することが考えられるのですが、
    みなさんはこういう場合はどの様に設計されますか?
    963 : NAME IS - 2011/01/14(金) 11:57:14 ID:??? (+41,+29,-102)
    >>962

    > バッチで登録処理を行なっている間も他のプログラムからテーブルへの
    > 参照が行われる事が考えられるのでトランザクションを貼ろうと考えていますが、

    参照が行われるからトランザクションを使う?
    その発想にいたる背景がわからないので答え難い。

    安易にバッチ処理での登録と考える前に、
    登録処理中にテーブル参照されることで発生する不都合が何かを考慮してから、
    データ登録の方法を考えるべきだと思います。
    964 : 962 - 2011/01/14(金) 14:11:23 ID:??? (+45,+29,-127)
    >>963

    言葉足らずで申し訳ありません。

    テーブルを参照するプログラムは
    データの集計を行うプログラムになります。
    Aというテーブルではバッチからの更新が終了しているけれど
    Bというテーブルではまだバッチで更新中となっている場合
    HOGEというプログラムが両方のテーブルの情報を集計するとなると
    テーブル間の不整合が発生するのでトランザクションを使用しています。

    そして今回はバッチで登録・更新をするテーブルの数が多いので
    >>962にあるような質問をさせていただきました。
    965 : NAME IS - 2011/01/14(金) 14:59:43 ID:??? (+35,+29,-176)
    HOGE というプログラムが、テーブルAとテーブルBを参照するんですね?
    そのHOGEというプログラムが、テーブルAとテーブルBに登録処理をしている最中でも稼動するんですね?

    HOGE というプログラムがシステムの中で重要度が高いのであれば…

    テーブルAとテーブルBにデータを登録する際には、HOGEというプログラムを考慮して、
    テーブルAとBへのデータ登録は両テーブルの整合性が取れている状態として1件ごとに処理をする。

    そんな方法を検討する可能性も有ります。

    述べられている「参照するプログラム」が出力する結果が、そのシステムでどれだけ重要であるかを考慮する必要があります。

    逆の意味で述べれば、テーブル更新が終了する前に、システムとして重要な出力結果を出すHOGEを実行しない、これが適切だとも言えます。
    966 : NAME IS - 2011/01/14(金) 15:04:48 ID:??? (+30,+29,-101)
    初歩的な質問ですが探してもわからなかったので質問します
    MySQL5.1をInnoDB Pluginで使っていますが、
    1つのテーブルのカラム数は大体このくらいまでにしておいた方が良い、ってのはありますか?
    扱うデータが多くて、素直に組むとカラム数が200ぐらいになるのですが
    これが1億レコードぐらいになると、パフォーマンスに結構影響しますか?
    経験がなくてわからないので、皆さんの意見を聞きたいです
    967 : NAME IS - 2011/01/14(金) 15:33:55 ID:??? (-22,-29,-51)
    >>966
    InnoDBは8KBのレコード長制限がある。
    VARCHAR、TEXTなど長いカラムはページ外に保存されるのだけど、
    200カラムは作れない可能性が高いので事前に確認しないとだめ
    作れるなら性能はそんなに気にしなくてもよい
    968 : NAME IS - 2011/01/14(金) 20:46:10 ID:??? (+36,+29,-11)
    >>964
    別にバッチ処理中か確認するようにすれば?
    別テーブルにフラグみたいなもん立てるとか。
    969 : NAME IS - 2011/01/15(土) 15:13:56 ID:??? (+34,+29,-14)
    素直にトランザクションで解決してなにが悪いのかワカラン。
    コミットに時間がかかってもバッチ処理なら問題ないだろうし。
    970 : NAME IS - 2011/01/15(土) 22:10:40 ID:??? (-27,-30,-98)
    ユーザー作成時に

    CREATE USER <ユーザ名> IDENTIFIED BY '<パスワード>';

    この時に同時に権限を設定するという事は出来ないのですか?これはあくまでもユーザーを作成するだけで
    権限付与は従来からのgrant文でということ?
    974 : NAME IS - 2011/01/16(日) 02:00:34 ID:??? (+35,+29,-26)
    >>971

    > カーソルを使って、1件ずつ読みだして処理する。。
    > MySQLで同じような処理を行おうと思いましたが、
    > カーソルに対応していないことを知りました。

    あなたの言われている「カーソルに対応していない」とは、何を指しているのか理解できません。

    975 : NAME IS - 2011/01/16(日) 02:17:05 ID:??? (+32,+29,-26)
    >>974
    カーソル知らないの?
    1行ずつフェッチして、更新したりできるんだよ、大量データを逐次処理できるの
    976 : NAME IS - 2011/01/16(日) 03:41:36 ID:??? (+27,+29,-20)
    > カーソルに対応していない

    カーソルは知っているけれども、対応していないが漠然としているのでは?
    978 : NAME IS - 2011/01/16(日) 12:47:41 ID:??? (-27,-25,-5)
    >>971
    カーソルに対応しているmysqlがあるとでも?
    979 : NAME IS - 2011/01/16(日) 15:01:37 ID:??? (+19,+30,+0)
    980 : NAME IS - 2011/01/16(日) 17:29:08 ID:??? (+28,+27,-6)
    >>979
    それ、ストアドだって。
    もともと、Cライブラリでカーソルとかいうことじゃね?
    981 : NAME IS - 2011/01/16(日) 19:46:45 ID:??? (-27,-30,-204)
    問題は、MySQLの通信プロトコル上、非prepare系のAPIでは
    SQLを実行した瞬間に結果の全件がクライアントに送られるところ。
    MySQLのカーソル操作はクライアント上でエミュレーションしているに過ぎない。
    だからSELECT結果が5GBとかに達する場合、クライアントが32bitだと処理できない。

    他のRDBMSでは「次のレコードをよこせ」というリクエストを送って
    数十レコードごと逐次結果が返されるようになっている。

    mysql_stmt_prepare()系は逐次レコードを返すはずだけど
    そもそもMySQLでそういうバッチ処理を書く人があまりいないので
    ノウハウが少ない。
    983 : 962 - 2011/01/17(月) 10:58:33 ID:??? (+42,+29,-208)
    >>965
    レスありがとうございます。
    >HOGE というプログラムが、テーブルAとテーブルBを参照するんですね?
    そうです。
    >そのHOGEというプログラムが、テーブルAとテーブルBに登録処理をしている最中でも稼動するんですね?
    そうです。

    >テーブル更新が終了する前に、システムとして重要な出力結果を出すHOGEを実行しない、これが適切だとも言えます。
    こちらの方法を検討してみようかと思っています。
    ただ、バッチは30分近くかかりそうなので、
    その間HOGEが実行されないのが業務用件的にNGになりそうな気配もあります。


    >>968
    ありがとうございます。
    その方向で少し検討してみます。

    >>969
    大量のデータを登録・更新するときって
    トランザクションをずーっと貼りつづけていると
    すこぶるパフォーマンスが落ちることってありませんか?
    あ、バックグラウンドのバッチだからそんなの気にしなくてもいいじゃないかって
    ことでしょうか?
    984 : NAME IS - 2011/01/17(月) 11:55:38 ID:??? (+39,+29,-66)
    >>983
    > >>969
    > 大量のデータを登録・更新するときって
    > トランザクションをずーっと貼りつづけていると
    > すこぶるパフォーマンスが落ちることってありませんか?

    InnoDBのMVCCはそこまでアホな実装じゃない。
    バッチだから仮に遅くても気にしなくていいってのはそう思うし。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - megab + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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