タグ付けされた質問 「mysql」

MySQLのすべてのバージョン(Microsoft SQL Serverではありません)。質問に関連する場合は、mysql-5.7のようなバージョン固有のタグも追加してください。

5
パージまたはフラッシュ後もMySQL binログファイルがまだ存在するのはなぜですか?
PURGE BINARY LOGSとFLUSH LOGSを使用しましたが、mysqlディレクトリにはまだ次のファイルが含まれています。 mysql-bin.000025 mysql-bin.000024 mysql-bin.000023 mysql-bin.000022 mysql-bin.000021 mysql-bin.000020 mysql-bin.000019 mysql-bin.index コマンドの使用が機能しない理由はありますか?これらのファイルは多くのスペースを使用しています。無事に取り除きたいです。

2
MariaDB Javaクライアントは、MySQL JDBC(Connector / J)に完全に置き換わるものですか?
前提:MySQLデータベースへのJDBC接続を行うJavaアプリケーションを出荷します。(この記事の執筆時点では、5.1または5.5である可能性がありますが、質問と回答がバージョンに大きく依存しないことを願っています。) 観察:明らかに、MySQL JDBCドライバー(Connector / J)またはMariaDB JDBCドライバー(MariaDB Javaクライアント)を使用して、MySQLサーバーに接続できます。ISVの観点からの大きな利点の1つは、MariaDBドライバーがLGPLライセンスであり、MySQLドライバーがGPLライセンスであるということです。MariaDBドライバーのパフォーマンスは非常に良いようです。 質問:MariaDB JDBCドライバーは、MySQL JDBCドライバーの完全な代替品ですか? 私はこの2つの相対的なメリットについての議論を求めているのではありません。しかし、むしろ私は誰かがこれらのいずれかに沿って答えてくれることを望んでいます: MariaDB JDBCドライバーにはXとYに関する重要な問題があるため、これらのいずれかを使用すると問題が発生します。 一部の記事、仕様、コード、またはその他の証拠に基づいて、MariaDB JDBCドライバーは、MySQLドライバーで使用可能なすべてのメソッドを(少なくとも)完全に実装します。大丈夫だよ。
11 mysql  mariadb  jdbc 

1
Qcache_free_memoryがいっぱいになっていませんが、たくさんのQcache_lowmem_prunesを取得しています
CMSのクエリキャッシュを少し始めました。 誰かが半分以上が無料であるときになぜ私が多くを得るのか私に言うことができますか(または少なくとも推測を与えることができますか)?Qcache_lowmem_prunesQcache_free_memory query_cache_size=512M query_cache_limit=1M 約12時間後の様子です show status like '%qcach%'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | Qcache_free_blocks | 10338 | | Qcache_free_memory | 297348320 | | Qcache_hits | 10254104 | | Qcache_inserts | 6072945 | | Qcache_lowmem_prunes | 725279 | | Qcache_not_cached | 2237603 | | Qcache_queries_in_cache | 48119 …

2
innodb_flush_log_at_trx_commitへの動的な変更
これはこの質問に関連しています。InnoDBテーブルのパフォーマンスを向上させるのに役立ちます。 MySQLマニュアルによれば、innodb_flush_log_at_trx_commitはグローバル動的変数です。したがって、SET GLOBALコマンドを使用して変更でき、正常に機能しているようです。 mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2; Query OK, 0 rows affected mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | innodb_flush_log_at_trx_commit | 2 | +--------------------------------+-------+ 1 row in set ただし、実際のMySQL設定は変更されませんでした。my.cnfを更新し、MySQLサーバーを再起動すると、機能しました。それで、実行時にグローバル変数を変更できませんか? 私はデフォルト値を好みinnodb_flush_log_at_trx_commit=1ますが、高速化するために大規模なデータベースの復元プロセスを実行する前に、それを2に変更する必要があります。しかし、プロセスが完了したら、値を1に戻したいと思います。実行時にこれを行うことは可能ですか? 共有ホスティングサーバーのmy.cnfにアクセスできません。


4
MySQL InnoDBは、READ COMMITTEDであっても削除時に主キーをロックします
序文 私たちのアプリケーションは、DELETEクエリを並行して実行するいくつかのスレッドを実行します。クエリは分離されたデータに影響します。つまりDELETE、別々のスレッドからの同じ行で同時発生する可能性はありません。ただし、ドキュメントごとに、MySQLはDELETEステートメントにいわゆる「次のキー」ロックを使用します。これにより、一致するキーと一部のギャップの両方がロックされます。このことはデッドロックを引き起こし、私たちが見つけた唯一の解決策はREAD COMMITTED分離レベルを使用することです。 問題 巨大なテーブルDELETEがJOIN複数ある複雑なステートメントを実行すると問題が発生します。特定のケースでは、警告が2行しかないテーブルがありますが、クエリは2つの個別のINNER JOINedテーブルから特定のエンティティに属するすべての警告を削除する必要があります。クエリは次のとおりです。 DELETE pw FROM proc_warnings pw INNER JOIN day_position dp ON dp.transaction_id = pw.transaction_id INNER JOIN ivehicle_days vd ON vd.id = dp.ivehicle_day_id WHERE vd.ivehicle_id=? AND dp.dirty_data=1 day_positionテーブルが十分に大きい場合(私のテストケースでは1448行あります)、READ COMMITTED分離モードでもトランザクションはテーブル全体を ブロックしproc_warningsます。 この問題は常にこのサンプルデータ(http://yadi.sk/d/QDuwBtpW1BxB9)で再現されます(MySQL 5.1(5.1.59でチェック)およびMySQL 5.5(MySQL 5.5.24でチェック))。 編集:リンクされたサンプルデータには、クエリテーブルのスキーマとインデックスも含まれています。 CREATE TABLE `proc_warnings` ( `id` int(11) NOT NULL AUTO_INCREMENT, `transaction_id` int(10) …

3
INNODBパフォーマンスリークはどこにありますか?
私には修正できないように見える奇妙な問題があります。私はサーバー/ DB管理者というよりはWebプログラマーなので、ここの誰かが私を助けてくれることを願っています。 状況 私はたくさんの扱うシステムに取り組んでいますupdate、insertとdeleteの要求を。そのため、行ロック機能のストレージエンジンとしてINNODBを選択しました。Gearmanを使用して異なるサーバーでの作業を並列化し、10分ごとに60,000レコードを更新しています。コードはPHPにあり、Zend Frameworkを使用しています。 問題 SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction 上記のエラーは、Gearmanワーカーの1人からほぼ30分ごとに発生します。 の mysql_report MySQL 5.1.63-0+squeeze1 uptime 15 9:52:12 Tue Sep 11 21:25:23 2012 __ Key _________________________________________________________________ Buffer used 55.00k of 16.00M %Used: 0.34 Current 2.92M %Usage: 18.24 Write hit 99.95% Read hit 100.00% …

3
MySQLを使用して定期的に100 GB以上のテーブルで多方向結合を行いますか?
背景: 適切にスケーリングできるようにしたいWebアプリケーションを作成しました。私はGoogleやTwitterではないことを知っていますが、私のアプリはユーザーごとにかなり大量のデータを使用するため、かなり高いデータ要件があります。後ですべてを再構築する必要なく、適切に拡張できるように準備したいと思っています。 私はデータベースの専門家ではなく、ソフトウェア開発者だと思っています。それが私がここに投稿する理由です。うまくいけば、より多くのデータベースの専門知識を持つ誰かが私に助言を与えることができます。 比較的多数のユーザーがいるが、Facebookの番号のようなものは何もないので、私は次のようなDBを期待しています。 1つの「大きなテーブル」: 2億5000万件のレコード 20カラム 約100 GBのデータ インデックス付きのbigint(20)外部キーがあります インデックス付きのvarchar(500)string_id列があります int(11)の「値」列があります 他の4つのテーブル: それぞれ1,000万件のレコード それぞれ約2〜4 GBのデータ これらの各テーブルには4〜8列があります 1つの列はdatetime date_createdです 1つの列はvarchar(500)string_id列です これらの各テーブルから1つまたは2つの列が結合で選択されます これらのテーブルの1つは平均を格納するために使用されます-そのスキーマはbigint(20)id、varchar(20)string_id、datetime date_created、float average_valueです。 私がやりたいこと -2つの比較的高価なクエリ: 新しい平均値を計算します。 外部キーを使用して、大きなテーブルから最大数百万の個別のレコードを選択します。 string_idでグループ化して、新しい平均を計算します。 結果を平均表に挿入します。 現在作成されているように、このクエリは2つの結合を使用します。 ユーザーにサービスを提供するための非正規化された読み取り専用レコードを作成します。 外部キーを使用して、大きなテーブルから1,000〜40,000レコードのいずれかを選択します。 文字列id列を持つ最新のレコードで他の4つのテーブルのそれぞれと結合します。 結果を非正規化テーブルに挿入します。 これらのレコードは、フロントエンドがユーザーに情報を表示するために使用されます。 現在作成されているように、このクエリは4つの結合を使用します。 ユーザーからのリクエストを処理するリアルタイムのフロントエンドDBサーバーに結果をプッシュするバッチバックエンドデータベースで、これらの高価なクエリをそれぞれ実行する予定です。これらのクエリは定期的に実行されます。頻度はまだ決めていません。平均的なクエリは、おそらく1日に1回行うことができます。非正規化クエリは、より頻繁に、おそらく数分ごとに実行する必要があります。 これらの各クエリは現在、MySQLの「ビッグテーブル」に100Kレコードのデータセットを持つ非常にローエンドのマシンで数秒で実行されます。私のスケーリング能力とスケーリングのコストの両方が心配です。 質問: このアプローチは健全に見えますか?全体像の観点から、明らかに問題はありますか? RDBMSは適切なツールですか、それともHadoopファミリのような他の「ビッグデータ」ソリューションを検討する必要がありますか?データは構造化されており、リレーショナルモデルにうまく適合しているため、RDBMSを使用する傾向があります。ただし、ある時点で、RDBMSを使用できなくなる可能性があるというのが私の理解です。本当?このスイッチが必要になるのはいつですか? うまくいきますか?これらのクエリは妥当な時間内に実行できますか?クエリ#1はおそらく数時間待つことができますが、クエリ#2は数分で完了するはずです。 ハードウェアの観点から何を考慮すべきですか?RAMとCPUのボトルネックになる可能性があるのは何ですか?RAMにインデックスを保持することが重要だと思います。他に考慮すべきことはありますか? ある時点で、おそらくデータを分割して複数のサーバーを使用する必要があります。私のユースケースはすでにそのカテゴリにあるように見えますか、それともしばらくの間、1台のマシンを垂直方向にスケーリングできますか?これはデータの10倍で動作しますか?100倍?
11 mysql  rdbms 

1
頻繁にクエリされる100,000レコードのMySQLテーブル
私はさまざまな種類の情報を格納するために、約100個のテーブルの単一のデータベースを持っています。 最も重要なテーブルは、顧客の注文を格納するために使用される注文テーブルであり、現在および増加している現在では10万件を超えるレコードです。 このテーブルは、リアルタイム注文ダッシュボード、統計、分析などから必要な情報のさまざまな部分について、データベースで最もクエリの多いテーブルです。 私は定期的にデータベースを監視しており、問題を追跡するためにデータベースで遅いクエリを有効にしています。 私はmysqltunerのようなスクリプトを使用して、毎日クエリを吐き出しています。 また、mysqlslaを使用して、データベース内の最も遅い10個のクエリに関する情報を収集します。 sample stat Count : 11.48k (30.66%) Time : 19.623758 s total, 1.709 ms avg, 239 µs to 2.475017 s max (18.64%) 95% of Time : 5.246833 s total, 481 µs avg, 239 µs to 1.095 ms max Lock Time (s) : 14.460071 s total, …

1
InnoDB INSERTパフォーマンスの機能
こんにちは、Percona Serverの最新バージョンを実行しています。 サーバーのバージョン:5.5.24-55 Percona Server(GPL)、リリース26.0 私はこれらの特性の10 cpuボックスを持っています。 processor : 0 vendor_id : AuthenticAMD cpu family : 16 model : 9 model name : AMD Opteron(tm) Processor 6128 stepping : 1 microcode : 0x10000d9 cpu MHz : 800.000 cache size : 512 KB SSDと64GBのRAMを搭載しています。Innodbは約10GBであるため、innodb_buffer_pool_sizeは10GBに設定されています。 次のようなテーブルがあります。 create table TODAY ( symbol_id integer …

2
すべてのデータベースでSQLクエリを実行する
cPanelとphpmyadminを使用する1つのホスティングアカウントを持っています。 このアカウントの下に50のデータベースがあり、すべてWordPressです。 このクエリを変更して、すべてのデータベースを実行してパスワードを更新する必要があります。 UPDATE 'wp_users' SET 'user_pass' = MD5( 'somepassword')WHERE 'user_login' = 'admin' LIMIT 1; データベースを1つずつ経由する必要がなく、すべてのデータベースをターゲットにできるソリューションを期待しています。 ありがとうございました
11 mysql  phpmyadmin 

2
MySQLのSHOW SLAVE STATUSを理解しようとしています
マスタースレーブレプリケーションのセットアップを行っていますが、正常に動作しているようです。以下はSHOW SLAVE STATUSコマンドの結果です: show slave STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: *.*.*.* Master_User: repliV1 Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 10726644 Relay_Log_File: mysqld-relay-bin.000056 Relay_Log_Pos: 231871 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: data1 Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: …

6
サーバーの再起動後にInnodbデータベースのauto_increment IDがリセットされないようにします
私は最近、サーバーの再起動時にInnoDBがAUTO_INCREMENT値を再計算する方法のため、IDリストの上限にあるすべてのレコードのIDが再利用される可能性があることを最近読みました。 ユーザーが削除されると、IDに関連付けられたすべてのものが他のテーブルからも削除されるため、通常、これは問題にはなりません。 ただし、過去の会話が維持されるように、「= User#123 =による投稿」というラベルが付けられたフォーラム投稿を意図的に孤立させておきます。明らかに、IDが再利用される場合、これは問題になります。 この方法でIDが再利用される可能性を低くするのに十分な数の新しいユーザーが常にいるため、私はこれまでこの問題に遭遇したことがありません。ただし、私の新しいプロジェクトでは、サインアップはまれであり、非アクティブなユーザーの削除が頻繁に行われ(特に、「Open Alpha」アカウントはプレビューとして3日間しか持続しないため)、そのようなIDの再利用は3〜3回発生しています。 AUTO_INCREMENTの正しい値を他の場所に保存し、内部値に依存する代わりにそれを使用することにより、問題を「修正」しました。InnoDBに実際の最後の値を記憶させる実際の方法はありますか?
11 mysql  innodb 

1
請求書の生成と追跡
2週間ごとに、システムは会社の請求書を生成します。 会社は毎月1日と16日に請求書を受け取ります。(2週間ごとにCron Jobを介して実行されます。注文テーブルをスキャンし、「請求書」テーブルに追加します。別の方法はありますか?) 表には顧客の注文のリストがあり、ordersそれが所属する会社も示しています(orders.company_id) invoiceテーブルには、からの注文の総コスト計算orders表を。 私は、合理的な請求書追跡を設計する方法を理解しようとしています。会社によっては料金を送ってくれる場合もあれば、料金を送ってくれる場合もあります(invoice.amount) 次のもので請求書を追跡する必要があります。 会社が私に金額を送ったとき いつ会社に送金しましたか 会社から受け取った金額 会社にいくら送ったか 全額を受け取りましたか(受け取っていない場合、DBで何を更新する必要がありますか?) 請求書のステータス(送信済み、キャンセル済み、受領済み金額、送信済み金額) ここに私が思いついたデータベース設計があります: 会社のテーブル mysql> select * from company; +----+-----------+ | id | name | +----+-----------+ | 1 | Company A | | 2 | Company B | +----+-----------+ 顧客は私のウェブサイトから会社を選択できます。 注文表 mysql> select * from orders; +----+---------+------------+------------+---------------------+-----------+ | id …


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.