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

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

2
MySQLがディスク上に非常に多くの一時テーブルを作成しているのはなぜですか?
構成の間違いにより、mysql..mysqlチューナーショーで一時テーブルが多くなりすぎる可能性があります Current max_heap_table_size = 200 M Current tmp_table_size = 200 M Of 17158 temp tables, 30% were created on disk table_open_cache = 125 tables table_definition_cache = 256 tables You have a total of 97 tables You have 125 open tables. Current table_cache hit rate is 3% 以前の一時テーブルは「23725個の一時テーブルのうち38%がディスク上に作成されたもの」でしたが、max_heapとtmp_tableを16mから200mに変更し、30%に下げました。 構成: engine myisam …
13 mysql  innodb  myisam  memory 

2
InnoDBテーブルから断片化をどのように削除しますか?
複数のテーブルを持つデータベースがあります。 レコードの数が20Kまたは50Kを超えていると言うテーブルからいくつかのレコードを削除したい。 すべてのテーブルはInnoDBです。そして、file_per_tableあるオフ。 いくつかのテーブルからレコードを削除すると、テーブルに断片化が生じます。 断片化を削除する方法はありますか? 4月17日に更新 mysql> select TABLE_NAME, TABLE_SCHEMA, Data_free from information_schema.TABLES where TABLE_SCHEMA NOT IN ('information_schema', 'mysql') and Data_Free >0; +-----------------+--------------+-----------+ | TABLE_NAME | TABLE_SCHEMA | Data_free | +-----------------+--------------+-----------+ | City | world_innodb | 5242880 | | City_Copy | world_innodb | 5242880 | | Country | world_innodb | …

4
主キーとしてのMySQL intとvarchar(InnoDB Storage Engine?
私はWebアプリケーション(プロジェクト管理システム)を構築していますが、パフォーマンスに関してはこれについて疑問に思っていました。 課題テーブルがあり、その中には他のさまざまなテーブルにリンクする12の外部キーがあります。そのうち8つは、他のテーブルからタイトルフィールドを取得するために参加する必要があります。これは、Webアプリケーションでレコードが意味をなすようにするためです。これらの結合ごとに1つのフィールド。 今、永続的な理由で自動増分主キーを使用するように言われました(シャーディングがGUIDを使用する必要がある場合を除きます)が、varchar(最大長32)のパフォーマンスを使用するのはどれほど悪いですか?つまり、これらのテーブルのほとんどは、おそらく多くのレコードに含まれないでしょう(それらのほとんどは20未満でなければなりません)。また、タイトルを主キーとして使用すると、95%の時間を結合する必要がないため、SQLの95%でパフォーマンスヒットさえ発生します(私は思う)。私が考えることができる唯一の欠点は、私はより高いディスクスペース使用量を持っているということです(しかし、1日は本当に大したことです)。 列挙の代わりにこのようなものの多くにルックアップテーブルを使用している理由は、これらの値のすべてがアプリケーション自体を介してエンドユーザーによって構成可能である必要があるためです。 多くのレコードを持つことを除いて、テーブルの主キーとしてvarcharを使用することの欠点は何ですか? 更新-いくつかのテスト それで、私はこのものでいくつかの基本的なテストをすることにしました。私は100000レコードを所有しており、これらは基本クエリです。 ベースVARCHAR FKクエリ SELECT i.id, i.key, i.title, i.reporterUserUsername, i.assignedUserUsername, i.projectTitle, i.ProjectComponentTitle, i.affectedProjectVersionTitle, i.originalFixedProjectVersionTitle, i.fixedProjectVersionTitle, i.durationEstimate, i.storyPoints, i.dueDate, i.issueSecurityLevelId, i.creatorUserUsername, i.createdTimestamp, i.updatedTimestamp, i.issueTypeId, i.issueStatusId FROM ProjectManagement.Issues i ベースINT FKクエリ SELECT i.id, i.key, i.title, ru.username as reporterUserUsername, au.username as assignedUserUsername, p.title as projectTitle, pc.title as ProjectComponentTitle, …

4
InnoDBの行ロック-実装方法
私は今、mysqlサイトを読んで見回していますが、それがどのように機能するかを正確に見ることができません。 書き込みの結果を選択して行ロックし、変更を書き込み、ロックを解除します。audocommitはオンです。 スキーム id (int) name (varchar50) status (enum 'pending', 'working', 'complete') created (datetime) updated (datetime) ステータスが保留中のアイテムを選択し、作業中に更新します。排他的な書き込みを使用して、同じアイテムが2回ピックアップされないようにします。 そう; "SELECT id FROM `items` WHERE `status`='pending' LIMIT 1 FOR WRITE" 結果からIDを取得します "UPDATE `items` SET `status`='working', `updated`=NOW() WHERE `id`=<selected id> ロックを解除するために何かする必要がありますか?
13 mysql  innodb  locking 

2
データベースの再設計の機会:このセンサーデータ収集に使用するテーブル設計は?
バックグラウンド 約2000個のセンサーのネットワークがあり、各センサーには10分間隔で収集する約100個のデータポイントがあります。これらのデータポイントは通常int値ですが、一部は文字列と浮動小数点です。このデータは90日間保存する必要がありますが、可能であればさらに保存し、効率的です。 データベース設計 もともとこのプロジェクトを担当していたとき、私は各センサーにコンマ区切りファイルを書き込むC#アプリを作成しました。当時はそれほど多くはありませんでしたが、誰かがトレンドを調べたいときは、ExcelでCSVを開き、必要に応じてグラフ化しました。 事態は拡大し、MySQLデータベースに切り替えました。センサーごとにテーブルを作成しました(はい、たくさんのテーブルがあります!)。うまく機能していますが、いくつかの制限があります。非常に多くのテーブルがあるため、特定の値を検索するときにすべてのセンサーからデータを検索するクエリを作成することは明らかに不可能です。 次のバージョンでは、Microsoft SQL Server Expressに切り替えて、すべてのセンサーデータを1つの大きなテーブルに入れました。これも機能し、クエリを実行して、関心のあるすべてのセンサーから値を見つけることができます。ただし、Expressバージョンでは10 GBの制限に達したため、SQL Server Standardに投資するのではなく、MySQLに切り替えることにしました。 質問 私はMySQLのパフォーマンスとスケーラビリティに満足していますが、1つのテーブルにすべてを収めたアプローチに固執するのが最善かどうかはわかりません。1つのテーブルで10 GBが異なるデザインを要求しているようです。グラフ作成のためにデータを照会する必要性はまだあることに言及する必要があります。たとえば、1つのセンサーの温度データを90日間にわたってグラフ化する照会のパフォーマンスの問題があることを懸念しています。(つまり、グラフは、目的のセンサーを分離するためだけにSQLがデータの山を並べ替えるのを待たずに、すぐに作成できるものでなければなりません。) パフォーマンスを向上させるために、このテーブルを何らかの方法で分割する必要がありますか?それとも、そのような大きなテーブルを持つことは珍しくありませんか? Sensor ID列とTimestamp列にインデックスがあります。これは、ほとんどすべてのクエリの定義境界です。(つまり、時間Aから時間BまでのセンサーXのデータを取得します)。 シャーディングとパーティション分割について少し読んだことがありますが、この場合は適切であるとは感じません。 編集: これまでのコメントと回答に基づいて、いくつかの追加情報が役立つ場合があります。 無期限のストレージではない:現在、90日以上データを保存していません。毎日、90日より古いデータを削除するクエリを実行します。将来的に重要になる場合は、さらに保管しますが、今のところはそれで十分です。これにより、サイズを抑えることができ、パフォーマンスが向上します。 エンジンタイプ:元のMySQL実装はMyISAMを使用しました。今回は、新しい実装(多くではなく1つのデータテーブル)用にテーブルを作成するときに、デフォルトでInnoDBを使用しました。どちらか一方に要件があるとは思わない。 正規化:もちろん、データ収集テーブルの他に他のテーブルがあります。これらのサポートテーブルには、センサーのネットワーク情報、ユーザーのログイン情報などが保存されます。正規化することはあまりありません(私の知る限り)。データテーブルに非常に多くの列があるのは、各センサーからの変数が非常に多いためです。(複数の温度、光レベル、気圧など)私にとっての正規化とは、冗長なデータや繰り返しグループがないことを意味します。(少なくとも1NFの場合)特定のセンサーの場合、特定の時間にすべての値を保存するには1行のデータが必要で、1:N関係は関係していません(私は見ています)。 テーブルを機能的に分解し、(たとえば)1つのテーブルにすべての温度関連の値を作成し、別のテーブルにすべての空気圧関連の値を作成できます。これにより、温度のみのクエリを実行するユーザーの効率が向上する可能性がありますが、すべてのデータを一度に挿入する必要があります。それでも、SELECT操作の効率向上は価値があるかもしれません。明らかに、ユーザーがデータを要求する頻度に基づいて、テーブルを縦に分割した方が良いでしょう。おそらくこれが私がすべきことのすべてです。私は質問をする際に、これを行うことが価値があることの確認を探していると思います。 編集2: データの使用:通常、問題のあるアイテムのみに焦点を合わせるため、データの大部分は見られたり必要とされたりすることはありません。しかし、問題を見つけようとする際には、さまざまなツールを使用してデータを検索し、拡大するアイテムを決定します。 たとえば、メモリ使用量の値(顧客固有の独自のソフトウェアプログラム)と再起動/クラッシュの間に相関関係があることがわかりました。収集したデータポイントの1つはこのメモリ使用量に関連しており、特定のメモリ使用量を超えた後にデバイスが不安定になることを示す履歴データを見ることができました。今日、このソフトウェアを実行しているデバイスのサブセットについて、この値を確認し、値が高すぎる場合は再起動コマンドを発行します。これが発見されるまで、このデータの収集は価値があるとは思いませんでした。 このため、値に疑問がある場合でも、約100個のデータポイントを収集して保存することを維持しています。しかし、通常の日常的な使用では、ユーザーは通常、これらのパラメーターを十数個検討します。ユーザーが特定の地理的領域に興味を持つようになると、(ソフトウェアを使用して)おそらく数十個のセンサーのデータのグラフまたはスプレッドシートを生成できます。温度、気圧、光レベルなどを示す2つまたは3つのプロット線で30日間のグラフを見るのは珍しいことではありません。これを行うと、次のようなクエリが実行されます。 SELECT sensor_id, location, data_timestamp, temp1, air1, light1 FROM data WHERE data_timestamp >= '2012-02-01' AND sensor_id IN (1, 2, 3); (各センサーに独自のテーブルがある元のMySQLバージョンでは、3つの個別のクエリが発行されますが、結果はソフトウェアで結合されてグラフを作成します。) dataテーブルには非常に多くの行(〜1000万)が含まれているため、インデックスがidおよびdata_timestampになっているにもかかわらず、パフォーマンスは複数テーブルシナリオよりも著しく劣っています(この例では1秒未満ではなく、9秒で4500行が返されます)。特定の条件を満たすセンサーを見つける機能は、複数テーブルスキーマでは実質的にゼロであるため、単一のテーブルに移行する理由です。 …

4
インデックスの追加が非常に遅い…ETAを取得したり進捗を表示したりするmysqlコマンドはありますか?
現在、インデックスを追加するために、テーブル(20Mエントリ)でalterクエリを実行しています。すでに3日以上実行されています(「tmpテーブルへのコピー」でスタックします)。 クエリの進行状況を確認する方法はありますか、言い換えると、完了の推定時間を取得する方法はありますか? ありがとう。
13 mysql 

3
トーナメントデータベースを設計する最良の方法
今後のユーロ2012サッカートーナメントのすべての試合に賭けをするためのウェブページを作成しています。ノックアウトフェーズでどのアプローチを採用するかを決めるのに、助けが必要です。 以下のモックアップを作成しました。これは、すべての「既知の」グループステージマッチの結果を保存することにかなり満足しています。この設計により、ユーザーが正しい賭けをしたかどうかを非常に簡単に確認できます。 しかし、四半期および準決勝を保存する最良の方法は何ですか?これらの試合は、グループステージでの結果に依存します。 私が考えたアプローチの1つは、matchesテーブルにすべての試合を追加することでしたが、ノックアウトフェーズでの試合のために異なる変数または識別子をホーム/アウェイチームに割り当てました。そして、それらの識別子がチームにマッピングされた他のテーブルを用意します...

1
テーブルを異なるデータベース名に複製する
私たちのQA環境には、データベース名に接尾辞「test」が付いています。たとえば、実稼働環境のdbname1には、対応するdbname1testがQAにあります。(これは、主にprod / qa構成が混同されるのを防ぐためです)。 実際の実稼働テーブルをQAに複製したいテーブルがいくつかあります。「dbname1からdbname1testにレプリケートする」と言うように指示する方法がわからない これも可能ですか?

2
ファイルが移動されたInnoDBテーブルを回復する方法
そのため、レプリケーションストリームでセットアップされたテストデータベースサーバーがあります。名前を超えて、スレーブdatadirのスペースをすぐにいっぱいにする最適化が行われました。Mysqlは忠実に、もう少しスペースを待っていました。 このdatadirはmysqlのdatadirとしてのみ使用されるファイルシステムであるため、他に解放するものはありませんでした。 レプリケーションストリームの一部ではない4ギガのinnodbテストテーブルがあったので、それが機能するかどうかを確認するために何かを試してみようと思ったのです。 これが私がとったステップです 移動しようとしていたテーブルをフラッシュしました 読み取りロックを設定しました(書き込みがなく、レプリケーションストリームにない場合でも) .frmと.ibdをファイルシステムにコピーし、予備の部屋を用意しました テーブルのロックを解除しました そのテーブルは切り捨てられました-これにより、最適化が完了するのに十分なスペースが解放され、レプリケーションが再び開始されます。 mysqlのスレーブ化/シャットダウンを停止する ファイルをtmpからデータディレクトリにコピーして戻します mysqlを再起動します .errログには何も表示されず、見た目は良好です。mydbに接続して使用します。ショーテーブルで私がいじっていたテーブルを参照してください。しかし、私が試してみると select * from testtable limit 10; エラーが出ます ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist 私がこれまでに伝えることができることから、私は他のすべてのテーブルから問題なく読むことができ、複製は苦情なしでバックアップを開始しました。 この時点から回復するためにできることはありますか?必要に応じてゼロから再構築できますが、他の人がこのベンチャーについて一般的に考えていることを知りたいと思いました。完璧な結果が得られなかった一連の手順について何かありましたか? これがテストサーバーでない場合、「ライブで実行」して何が起こるかを確認できませんでした。私がそれを気に入らなければならなかった場合、本番スレーブのスペースを一時的に解放する最良の方法は何でしょうか?

5
MySQLワークベンチの代替[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は、MySQL Workbenchで修正できるかどうかわからない問題(つまり、表面化した古いバグのように見えるもの)に遭遇しました。そのため、私はそれを使用できない場合にそれへの良いバックアップ。Navicat(Navicatはビジネスでの使用には無料ではありません。 30日間の試用期間があります)など、いくつかの代替案を検討しましたが、現在の要件を十分に満たしているものはありません。 必要なもの: Linux互換(できればLinuxネイティブ、Ubuntuを使用しています) SSHトンネリング経由でリモートデータベースに接続可能 無料および/またはオープンソース(現在、製品に100ドル以上を払う資金がないため、とにかく優れたオープンソースプロジェクトをサポートします) 少なくともワークベンチと同等のインターフェース(慣れているからかもしれませんが、非常にきれいで直感的なタブ付きインターフェースが好きです;同一である必要はありません) MySQL 5+をサポート 持っているのはいいことですが、Workbenchにある余分なデータモデリングは必要ありません。派手なGUIのもの(クエリデザイナーなど)も必要ありません。整然とした方法でデータを表示する方法とクエリを編集する場所は、本当に必要なすべてです。 現在、HeidiSQLをチェックアウトしていますが、Win9x / Win2kを実行していたときに使用していたものを思い出します。データベースをダンプしたり、複数のテーブルに変更を加えたりする機能。

2
INSERTは自動コミットされますか?
私たちのアプリケーションは、レコードを追加するためにMySQLデータベースに対してINSERTクエリを起動します。レコードが自動コミットされるかどうかを知りたい。ROLLBACKコマンドを実行すると、データベースはいつロールバックを実行しますか?COMMITの後にROLLBACKは可能ですか?
13 mysql  innodb 

3
MySQLログをsyslogに出力するにはどうすればよいですか?
Ubuntu(10.04 LTS)でMySQL(5.1.41)のログにsyslogを使用したい。エラーログをsyslogに出力する情報を見つけました。 [mysqld_safe] syslog しかし、一般的なログとスロークエリログを記録するためにsyslogを使用したいと思います。設定ファイルの書き方を教えてください。 リファレンスマニュアルでその方法を見つけることができませんでした。 http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
13 mysql  logs 


5
同じ物理サーバーでレプリケーションを実行するのは賢明ではありませんか?
データベースのマスタースレーブレプリケーションのセットアップを検討しています。スレーブサーバーは冗長性のために使用され、場合によってはレポートサーバーとして使用されます。しかし、私が直面している最大の問題の1つは、データセンターのパワーがすでに限界に達していることです。そのため、別の物理サーバーを追加することはオプションではありません。 既存のデータベースサーバーは、CPUに関しては十分に活用されていません(クアッドコアで平均負荷が1を超えることはありません)。そのため、主要なアイデアは、いくつかの新しいドライブをトスし、メモリを2倍(8GBから16)にして、同じ物理マシンで2番目のmysqlインスタンスを実行することです。各インスタンスには、データベース用に個別のディスクがあります。 この考えに何か問題はありますか? 編集(詳細):私は(幸運にも)サーバーを停止するほど悪いことは一度もありませんでしたが、前もって計画しようとしています。もちろん、夜間にバックアップを作成して、そこから回復できます。ただし、マスターサーバーのドライブに障害が発生した場合(マシン全体が停止した場合は明らかにそうではない)、冗長データを別のディスクに保存すると、より迅速なソリューションが得られると考えました。 レポートの側面に関しては、レポートするテーブルはすべてMyIsamです。そのため、書き込み中の同じテーブルで高価な読み取りを行うと、サーバーが動かなくなる可能性があります。私の想定では、CPU負荷がまだ問題になっていないため、十分なRAMを投入する限り、スレーブサーバーがメインサーバーに影響を及ぼさないと報告していました。

3
MySQLストアドルーチンの動的SQL
ストアドルーチンとトリガーの制限に従って、動的SQLは使用できません(バージョン5.0.13以降のストアドプロシージャの制限は解除されました)。この制限が設定されているのはなぜですか?そして、なぜそれを手順のために持ち上げますが、機能やトリガーではありませんか?

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