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

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

4
16 GBのRAMを搭載したQuadCoreマシンでMySQLを最大限に活用する方法は?
科学的データ分析のためにワークステーションでMySQL 5.5サーバーを実行していますが、パフォーマンスを最大限に活用するためにMySQLを構成する方法を考えています。私が通常実行するクエリの種類には、10〜20のテーブルの結合が含まれ、非常に長く実行できます。1〜数分は例外ではありません。同時にデータベースにアクセスするユーザーはごくわずかです(最大5人)。2.2 GHzのデュアルコアと4 GBのRAMを搭載したLenovo Thinkpad T61から、コンポーネントを手動で選択した次の新しいマシンにサーバーを移動しました。 Intel i7 3770、4x 3.4 GHz(4x3.7 GHzで稼働) Z77チップセット 16 GBのDDR3 1600 RAM Windows 7 Prof 64ビット WindowsおよびMySQLサーバーはIntel 520シリーズSSDドライブで実行されます。 最初のテスト(両方のマシンで同じクエリを実行)は、新しいテストの速度の決定的な改善を示しましたが、クエリにはまだ多くの時間がかかり、さらに向上することを期待していました。問題のクエリはかなり適切に最適化されています。つまり、すべてのテーブルには、「拡張された説明」の時点でも使用されている適切なキーがあります。 さて、現在のMySQLの設定に戻ります。最初に、MyISAMからInnodbにかなり前に移動したことを述べておきます。 my.iniの調整の一部(つまり、デフォルト設定からの逸脱): # Maximum size for internal (in-memory) temporary tables. If a table # grows larger than this value, it is automatically converted to disk # …

4
MySQLの以前のスレーブをマスターに変更し、スレーブステータス情報を削除する方法は?
マスターが失敗したマスター->スレーブ構成があります。私は古いスレーブをマスターに、古いマスターをスレーブにリセットすることができました。いいね。 私ができないように見えるのは、現在新しいマスターになっている古いスレーブのマスター情報を削除することです。そうですか: mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Master_Host: 10.1.2.101 Master_User: replicationSlave Master_Port: 3306 ... Slave_IO_Running: No Slave_SQL_Running: No 多くのMySQLドキュメントを読みましたが、スレーブ情報をnew-masterからクリアする方法がまだ見つかりません。私はもう試した: RESET SLAVEこれらの設定はクリアされないようです。[実際には、master.infoファイルは削除されますが、メモリ設定は削除されません。下記参照。]] CHANGE MASTER TO MASTER_HOST='' これは最近廃止されたため、エラーが発生しただけです。 my.cnfそれらがプログラムで追加されたため、マスター情報がないものをチェックしています。 RESET MASTER一部のmysqlドキュメントで推奨されているため。これは、binログのみをリセットします。 内部のMySQLテーブルを調べて、クリアするフィールドが見つかるかどうかを確認します。 MySQL〜5.5.9でこれを行う適切な方法は何ですか?助けてくれてありがとう。 編集: したがって、@ RolandoMySQLDBAが暗示するようにファイルをRESET SLAVE削除することがmaster.infoわかりました。ただし、スレーブ情報を削除する前に、サーバーを再起動する必要があります。 mysqldを再起動せずにこのスレーブ情報を削除する方法はありますか?

1
全文検索でLIKEよりも少ない行が返される理由
全文検索が期待どおりに機能せず、結果リストの違いがわかりません。 ステートメントの例: SELECT `meldungstext` FROM `artikel` WHERE `meldungstext` LIKE '%punkt%' 92行を返します。たとえば、 "Punkten"、 "Zwei-Punkte-Vorsprung"、 "Treffpunkt"などの一致する行がmeldungstext列に表示されます。 「meldungstext」列にフルテキストインデックスを設定し、これを試しました。 SELECT `meldungstext` FROM `artikel` WHERE MATCH (`meldungstext`) AGAINST ('*punkt*') これは8行のみを返します。「Punkt」自体に一致する行、または「i-Punkt」のように「Punkt」と見なされると思われる単語のみを受け取ります。 次にブールモードを試しました: SELECT `meldungstext` FROM `artikel` WHERE MATCH (`meldungstext`) AGAINST ('*punkt*' IN BOOLEAN MODE) 44行を返します。meldungstext列に「Zwei-Punkte-Vorsprung」または「Treffpunkt」を含む行が表示されますが、「Punkten」の行は表示されません。 なぜこれが発生し、「完全に」機能する全文検索を設定して、where句でLIKE '%%'を使用しないようにするにはどうすればよいですか?

2
クエリがテーブルレベルのロックを待機しないようにする方法
お客様のデータベースを追加のサーバーに移動した後、問題が発生しました。これはサイトのパフォーマンスにプラスの影響を与えるはずでしたが、MyISAMのテーブルロックに問題があります。(MyISAMの代わりにInnoDBを使用することを聞いたことがありますが、近い将来エンジンを変更することはできません)。 モデレーターが記事サイトのコメントをアクティブ化するときに実行されるupdate-queryにそれを見つけることができます。これはプロセスです: update-queryが処理されます SET status = 1 WHERE id = 5(インデックスが設定されます) ページのキャッシュファイルが削除されます この時点で、ページ全体が遅くなります。データベース自体は数分間ビジーです。私はプロセスリストを数回フェッチし、さまざまな選択クエリの約60のエントリを確認しました。これらはすべて、テーブルレベルのロックを待機している状態でした。 1.テーブルに対するこの更新が、テーブルレベルのロックを待機するテーブルのarticle_commentsselect-statementsに影響を与える理由がわかりませんarticle。プロセスリストでは、待機中のほとんどすべてのクエリがこのテーブルからのものでした。selectよりもupdate / insertが優先され、これがそのような問題を引き起こす可能性があるという事実を読みましたが、記事テーブル自体はコメントがアクティブになっても更新されないので、selectは待つべきではありません。私はそれを誤解しましたか? 2.この動作を防止するため、または少なくともより良いバランスを得るために、InnoDBに変更する以外に何かありますか?データベースを新しいサーバーに移動する前にこの問題が発生しなかったという事実に非常に苛立ちました。いくつかの設定ミスがあると思いますが、特定する方法がわかりません。

2
MySQLでのソートにインデックスが使用されているかどうかを確認するにはどうすればよいですか?
WHERE句で使用されているインデックスの最後の列である列を使用するORDER BY句を含むクエリがあります。 SELECT cols FROM tables WHERE col_1 = x AND col_2 = y AND col_3 = z ORDER BY col_4 インデックスは、列(col_1、col_2、col_3、col_4)にこの順序で作成されます。 クエリのプロファイルを作成すると、99%以上の時間を「結果の並べ替え」状態で費やしています。col_4は、違いがある場合はタイムスタンプ列です。ORDER BYは特定の状況でのみインデックスを使用できることを理解していますが、オプティマイザがいつ使用するかについては、まだ少し不思議です。
10 mysql  index  sorting 

2
あるテーブルを別のテーブルの「エイリアス」または「シンボリックリンク」にすることはできますか?
同じ構造の2つのテーブルAとBがあります。特定のアプリケーションは、常に両方のテーブルに同じデータを書き込むように作成されています。 ドライブスペースを節約する可能性について同僚と話し合った後、mysqlまたはpostgresqlが別のテーブルの「エイリアス」または「シンボリックリンク」としてテーブルに作成できるかどうか疑問に思っています。 ソフトファイルのシンボリックリンクの動作と非常によく似た動作にしたい。シンボリックリンク自体またはそのターゲットのいずれかから読み取ると同じ出力が生成され、どちらかに書き込むとターゲットが更新されます。
10 mysql  postgresql 

3
InnoDBエンジンで挿入遅延を使用し、挿入ステートメントの接続を減らす方法は?
多くのデータベース書き込み、約70%の挿入、30%の読み取りを含むアプリケーションに取り組んでいます。この比率には、1回の読み取りと1回の書き込みと見なす更新も含まれます。insertステートメントを使用して、複数のクライアントが以下のinsertステートメントを介してデータベースにデータを挿入します。 $mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)"); 問題は、insertステートメントがサーバーで最大 100%のCPU を使用するため、insert_delayまたはmysqli_multi_queryメカニズムのどちらを使用するかです。データベースでInnoDBエンジンを使用しているため、挿入の遅延は不可能です。サーバーへの挿入は〜36k /時間、99.89%の読み取りです。また、selectステートメントを使用して、単一のクエリでデータを7回取得しています。このクエリの実行には、サーバーで150秒かかります。このタスクにはどのようなテクニックやメカニズムを使用できますか?サーバーのメモリは2 GBですが、メモリを拡張する必要がありますか?この問題を見てください、どんな提案も私に感謝します。 テーブルの構造: +-----------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user …

2
CREATE TABLE AS SELECT中にMySQLがロックする
次の(ダミー)クエリを実行しています CREATE TABLE large_temp_table AS SELECT a.*, b.*, c.* FROM a LEFT JOIN b ON a.foo = b.foo LEFT JOIN c ON a.bar = c.bar クエリの実行に10分かかるとします。テーブルa、b、cの実行中に値を更新しようとすると、上記のクエリが最初に完了するまで待機します。このロックを回避したい(データの整合性は重要ではない)。どうすればそれを達成できますか? 使用:MySQL 5.1.41およびInnoDBテーブル ps SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 動作に変化はありません 更新 クエリが実行されている間、SHOW ENGINE INNODB STATUSの出力は次のようになります(ここでは目的のために非常に遅いクエリを作成しています)。 ===================================== 120323 15:26:29 INNODB MONITOR OUTPUT ===================================== Per second …
10 mysql  locking  ctas 

2
Debianで単一のMySQLクエリに複数のコアを使用する
ゲストOSとしてDebianを使用するVM(VMWare)でテスト用のMySQLサーバーを実行しています。ゲストには4つのエミュレートされたCPUコアがあるため、thread_concurrencyを4に設定しました。 数分かかる可能性のある大きなテーブルで高価な結合を行っていますが、ゲストOSで一度に使用されるコアは1つだけです。これは、関係するテーブルに使用されているストレージエンジンに関係なく発生します(MyISAMおよびInnoDBでテスト済み)。さらに、これらの大きなクエリを実行すると、データベース全体がブロックされているように見えるため、追加のクエリを並行して実行することはできません。奇妙なことに、htopは、クエリに使用されるコアがクエリの実行中に変化することを示しています! なぜこれが起こるのですか? これは関連するエントリですSHOW FULL PROCESSLIST;(他のクエリはありません)。 | 153 | root | localhost | pulse_stocks | Query | 50 | Copying to tmp table | SELECT DISTINCT * FROM `pulse_stocks`.`stocks` sto, `pulse_new`.`security` sec WHERE (sto.excntry = sec.excntry AND sto.stock_id = sec.ibtic) OR ( sto.isin = sec.isin AND sto.isin <> "" AND …


1
使用中のマスター/スレーブ複製システムで単一のmysqlデータベースを回復する
忙しいレプリケートされたシステムで単一のデータベースを特定の時点にリカバリするための戦略またはツールを探しています。 マスタースレーブ複製構成の2つのMySQL 5.0.77サーバーで実行されている12のデータベースがあります。読み取り専用スレーブのフルダンプが毎日取得され、これらのバックアップがオフサイトにある増分SQLダンプが利用可能であり、レプリケーションステータスが監視されます。 編集:テーブルはInnoDBとmyISAMの混合であるため、エンジン固有のソリューションは利用できません。 したがって、マスターサーバーに完全な障害が発生した場合、レプリケーションを中断してスレーブサーバーを昇格させることができます。また、新しいサーバーを再構築してオフサイドのフルバックアップから構成し、スレーブから1時間ごとに取得した差分を適用することもできます。 ただし、部分的な障害、または単一のデータベースの障害に対処する方法を心配しています。かなりありそうな2つのシナリオを考えることができます。 データベース7(たとえば)が破損し、壊れていることに誰かが気付くまで、またはログファイルからアラートが出されるまで、いくつかの要求を処理し続けます... 「データベースの削除」、「テーブルの削除」、「更新場所...」タイプのクエリなどのクエリは、単一のデータベース、またはその一部のサブセットを作成します。 現時点では、FULL- $ DATE-all-databases.sql.gzファイルとしての一連のフルダンプと、DIFF- $ DATE-all-databases.sql.gzとしてフルダンプに適用できる差分があります。 データベース7を特定の時点に復元するには、FULLおよびDIFFファイルを介したgrepと、そのSQLの手動による適用が必要です。 マスターデータベースへの以前のDIFFダンプの1つに回復できるようにするには、どうすればよいですか? 個々のデータベースファイルにバックアップする必要がありますか? mysqldump --databases "database1" | gzip > database1.sql.gz mysqldump --databases "database2" | gzip > database2.sql.gz mysqldump --databases "database3" | gzip > database3.sql.gz のではなく.. mysqldump --master-data --lock--all-databases --all-databases | gzip > all-databases.sql.gz 個別のmysqldumpファイルを使用する場合、マスターデータのバイナリログはどうなりますか?マスターサーバーのリカバリダンプに--master-dataを設定する必要がありますか?

3
SQLサーバーのストレステストを行う方法 [閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 3年前休業。 私は、MSSQLサーバーとMySQLサーバーのストレステストを担当しています。現在のシステムと新しいシステムでパフォーマンスを比較するために使用できるツールやスクリプトがあるかどうか知りたいのですが。 ディスクとプロセッサの読み取り/書き込みパフォーマンスを測定したいと思います。役に立つかもしれない何か他のものも素晴らしいでしょう。 ありがとう!

3
MySQLで最近傍検索を実装するにはどうすればよいですか?
つまり、要するに 緯度と経度のデータ型は何ですか? たとえば、最初の100近くのレストランを取得するには、どのSQLコマンドを呼び出す必要がありますか? 詳細: 緯度と経度がそれぞれ10万件のビジネスレコードがあります。MySQLが実際にポイントと呼ばれるデータ型をサポートしていることがわかります。代わりに使用する必要がありますか? MySQLはKDTreeストレージシステムをサポートしますかhttp://en.wikipedia.org/wiki/File:KDTree-animation.gif 緯度と経度を格納するには、通常のfloatデータ型ではなくポイントデータ型を使用するのが最善ですか? 最終的には、たとえばポイント105,6に最も近い最初の100軒のレストランのようなものを見つけたいと思います。私のデータベースには、たくさんのビジネスとポイントが含まれています。明らかに、すべてのレコードとすべてのポイントの距離を1つずつ計算することはO(n)であり、それで問題があります。 私はYelpのようなアプリケーションはデータベースから距離情報を効率的に取得する方法で説明されているより簡単な解決策を知っており、最初に自分も実装することに注意してください。それは良い答えです。 しかし、私はそれを上回るはずの作物の答えの1つのクリームがあると思いますか?実際、緯度と経度に基づいて場所を保存し、それに最も近いものを見つけることは、mysqlに特別な設計パターンがあることを期待する非常に一般的な問題です。それはありますか? 詳細はどこで確認できますか?ありがとう。
10 mysql 

3
クエリの問題:自動列は1つしかありません
誰かがこのテーブル定義の何が問題になっているのか教えてください。 mysqlのバージョンは5.1.52-logです root@localhost spoolrdb> create table spoolqueue ( queue int, idx bigint not null auto_increment, status smallint, querystring varchar(2048), contenttype varchar(255), characterencoding varchar(16), body text, primary key(queue,idx) ); ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
10 mysql  query 

2
MySQL 5.1 InnoDB構成/ 24GB RAM-bi-xeon高負荷
現在300〜600人の同時ユーザーがいる(そして成長している)Facebookアプリを実行しています。ハードウェアを成長させる準備をするために、i7 / 12GB RAM / 2x 80GB Intel X25 SSD(Debian 5.0 / MySQL 5.0 / 64bit)をBi-Xeon / 24GB RAM / 2X 120GB Intel Intel ssd(UBUNTU 10.10 / MySQL 5.1 /)に変更しました64ビット)。 今、私はパフォーマンスが「小さい箱」よりも悪いという問題に直面しています。両方のサーバーで、コンテンツを提供するためにnginx / php fcgiを使用しています。 私はinnodbのみを使用しており、読み取り/書き込みは約65%/ 35%です。約800-1000 qpsですが、すべてのクエリは単純で、2つ以上の追加テーブルに参加することはありません。すべてのインデックスが設定され、個別のクエリは低速ログ(> 2秒)に記録されません。現時点では、毎月2倍になると予想している約400MBのデータ(インデックス付きで約1GB)があります。 私はそれをよりスムーズに実行するために何を変えるべきかについてのヒントを私に与えることができる皆を崇拝します。 i7ボックスの古い構成はこのようなもので(myisamとinnodbの混合)、800以上のユーザーまではかなり良好に機能しました。 古いmy.cnf key_buffer = 3000M max_allowed_packet = 128M thread_stack = 192K …

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