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

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

1
MySQLインデックスの作成がテーブルで失敗する
更新:tl; dr:問題はMySQLがTMPDIRインデックスの作成時にを使用することでした。そして私TMPDIRはディスク容量が足りなくなった。 元のQ: InnoDBテーブルにインデックスを追加しようとしていて、を取得していtable is full errorます。十分なディスク容量があり、MySQL構成にはfile-per-table = 1があります。テーブルデータは85GBで、インデックスは約20GB-30GBであり、それよりもはるかに多くのディスク容量があると思います。私はext3も使用しているので、OSの観点からはファイルサイズの制限に問題はないと思います。 ログに記録されたエラーは次のようになります。 140616 13:04:33 InnoDB: Error: Write to file (merge) failed at offset 3 1940914176. InnoDB: 1048576 bytes should have been written, only 970752 were written. InnoDB: Operating system error number 0. InnoDB: Check that your OS and file system support files …
10 mysql  innodb  index 


1
大量(400万行)のmysqlデータを非常に定期的に効率的に削除する
常に約1200万行のmysqlテーブルがあります。テーブルのサイズをある程度管理しやすくするために、古いデータを削除する必要があります。 現在、cronジョブを使用して、このクエリを毎日午前0時に実行しています。 DELETE FROM table WHERE endTime < '1393632001' クエリが最後に実行されたとき、4,602,400が調べられ、3分以上かかり、CPUがルーフを通過しました。 古いデータをクリアしながら、CPU、同期db接続、ディスクキュー深度などが不当に急上昇しないようにするにはどうすればよいですか? PS:クエリが実際に使用サイクルのかなり都合の悪い時間に発生していることに気付くでしょう。クエリのタイミングを毎日使用する最低のポイントで発生するように既にシフトしていると仮定します。また、「endTime」にはインデックスがありません。非常に頻繁に挿入される大量のデータがあり、ルックアップが少ないため、可能であればそれを維持したいと思います。
10 php  mysql 

2
MySQLの `performance_schema`データベースを削除しました。どのように作成できますか?
ibdata / logの問題を修正しているときに、誤ってperformance_schemaデータベースを削除してしまいました。新しいデータベースを作成したいと思います。 mysql> SHOW VARIABLES LIKE 'perf%'; +---------------------------------------------------+---------+ | Variable_name | Value | +---------------------------------------------------+---------+ | performance_schema | ON | | performance_schema_events_waits_history_long_size | 10000 | | performance_schema_events_waits_history_size | 10 | | performance_schema_max_cond_classes | 80 | | performance_schema_max_cond_instances | 1000 | | performance_schema_max_file_classes | 50 | | performance_schema_max_file_handles | 32768 | …
10 mysql 

2
mysqladminがインラインパスワードを取得しない
スレーブマシンからバックアップを取るためのcronジョブを設定しようとしています。だから私はスレーブを停止する必要があります コマンドを発行しました mysqladmin --user=root --password=test_pass stop-slave しかし、それはエラーを投げています: mysqladmin: 'localhost'でサーバーに接続できませんでしたエラー: 'ユーザー' root '@' localhost 'のアクセスが拒否されました(パスワードを使用:YES)' 今、私はコマンドで試しました mysqladmin --user=root --password stop-slave パスワードを要求するプロンプトが表示され、私は次のように指定test_passしました。すべて問題ありませんでした。 なぜそうなったのですか?代替は何ですか? 注意:ちなみに私のmysqlのバージョンはですmysql-5.0.95-5。それは意味があります。

1
トランザクションにSelectステートメントを置く
これら2つのクエリの違いは何ですか。 START TRANSACTION; SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; COMMIT; そしてトランザクションなし: SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; SELECTトランザクション内での影響は何ですか? 場合はDELETE FROM orders WHERE id=1、右の後に別のセッションから呼び出されたSELECT両方のケースでは、ときそれが処理されるのですか?

3
2つのNULL可能列には値が必要です
説明なしの質問: とにかく、常に1が値を必要とする2つのnull値の制約を持つことはありますか?たとえば、2つの日付列はどちらもnullですが、値が必要な1 つ以上の列があります。 問題の説明: Expenseというテーブルがあるとします そして2つの日付があります: prevision_expense_expiration_date DATE NULLABLEense_payment_date DATE NULLABLE これら2つの列のロジックは次のとおりです。 私は何かを購入しましたが、電話代のような日付で支払う必要があることはわかっています。私はこれをexpense_payment_dateとともに費用として入力します。この日付は支払い予定日ですが、請求書の有効期限のような実際の支払い日ではありません。 他の状況では、あるサービスのギフトカードを販売しています。私があり、サービスが私のクライアントに転送私のプロバイダに購入の費用を持っているだけで、クライアントはカードを引き換える場合。したがって、ギフトカードには有効期限があります。ギフトカードが有効な期間の費用として挿入せずに、その「費用」を予測します。ギフトカードの有効期限が切れた場合、その「費用」はアカウントに入力しないでくださいシステム。 prevision_expenseとconfirm_expenseと呼ばれる2つの同等のテーブルを使用できることはわかっていますが、適切に聞こえないため、同じテーブルに2つの日付があり、nullを指定できますが、常に必要になるように制約または何かしたいです。 別の可能な戦略があります: payment_date DATE NOT NULL is_prevision_date BOOL NOT NULL したがって、この場合、日付がプロビジョニングの場合、ブール値は1になります。それ以外の場合は、0になります。null値はなく、すべて良好です。ただし、最初に予測日があり、THEN(2日後と言います)にその費用の確認日があるときに両方の値を保存するオプションが必要な場合を除きます。この場合、戦略2では、そのオプションはありません。 私はデータベース設計ですべてを間違っていますか?:D

4
文書化されていない大規模なデータベースに取り組む方法
私は最近、特定のX社の唯一のITガイとして雇われ、彼らのアプリケーションを修正する必要があります。私の意見では、データベースを理解することから始めるのが最善の方法です。 彼らの現在のデータベースは186のテーブルを持つMySQLデータベースです(いくつかのテーブルは神が理由を知っているので空であることに注意してください)。また、アプリケーションはMS Accessデータベースインターフェイスを介してデータベースと通信しています。(私はなぜ開発者もそれをしたのか自問します) 質問は、この文書化されていない大規模なデータベースへの取り組みをどのように開始するかです。はい、それは文書化されていません。アプリケーションの開発者は、私の生活を簡単にするために、ERDやデータディクショナリ、またはデータベースに関する情報を提供するつもりがないからです。かなり大規模なデータベースの隅々を理解するというこの危険な努力にどう取り組むべきでしょうか。 関連質問:醜いデータベースに飛び込む方法は?

4
mysqldumpを使用して500GBデータベースの高速バックアップと復元を増やす方法は?
500GBのデータベースAサイズがあります。データベースAのテーブルには、MyISAMテーブルとINNODBテーブルの両方が含まれています。MyISAMテーブルはマスターテーブルで、Innodbテーブルはメイントランザクションテーブルです。 mysqlダンプを使用してバックアップと復元を行うと、長時間または数日で終了します。 max_allowed_pa​​cket = 1G foreign_key_checks = 0 auto_commit =オフ

1
各テーブルではなく、統合クエリからMATCH()AGAINST()スコアを計算します
SELECTステートメントのセクション全体のスコアを取得しようとしています SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword') UNION SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword') UNION SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword') そのような場合、スコアはテーブルごとです+それらは関連性によって順序付けされていません しかし、私はこの方法を試しました、それは機能していますが、生産の価値はありません SELECT * FROM ( SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword') UNION …

2
保留中のトランザクションのあるMySQLテーブルの削除
MySQLで保留中のトランザクションがあるInnoDBテーブルまたはデータベースを(できればファイルシステムレベルで)削除する方法はありますか? どうした: MySQL 5.5.28を使用して実行LOAD DATA INFILE…し、巨大なデータセット(3億行)をInnoDBテーブルにインポートしました。set autocommit = 0;以前は使用していませんでした。残念ながら、mysqldインポートの途中で中止されました。 を再起動mysqlすると、トランザクションがロールバックされ、次のようなメッセージがシステムログに記録されます。 mysqld_safe [4433]:121212 16:58:52 InnoDB:1つのアクティブなトランザクションが完了するのを待機しています 問題は、ロールバックが25時間を超えて実行されている間 mysqld、ソケット接続を受け入れていないことです。 /var/lib/mysql/*このマシンには他にもいくつかのInnoDBデータベース/テーブルがあるため、削除して最初から始めることはできません。ただし、問題のあるテーブルは、別のデータベース内の唯一のテーブルです。後ですべてのデータを再インポートできるため、テーブル全体またはデータベース全体を削除しても問題ありません。

1
MySQLテーブルの作成がめちゃくちゃ遅い
MySQLデータベースの1つで単純なテーブルを作成すると、時間がかかります。 mysql> CREATE TABLE blah (id BIGINT UNSIGNED NOT NULL PRIMARY KEY); Query OK, 0 rows affected (16.58 sec) マシンはかなりアイドル状態です: 01:21:26 PM CPU %user %nice %system %iowait %steal %idle 01:21:27 PM all 0.50 0.00 0.21 0.00 0.00 99.29 これを調査する方法はありますか? 編集:DTestのアドバイスに従って、これは実行プロファイルです: mysql> SHOW PROFILE FOR QUERY 1; +----------------------+----------+ | Status | …

2
1時間あたり数千回の挿入を処理するようにMySQL Innodbを構成するにはどうすればよいですか?
非常にトラフィックの多いWebサイトを使用しており、毎時間数千の新しいレコードが挿入される可能性があります。 この1つのエラーがサイトに障害をもたらしています。 PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4); Array ( [:db_insert_placeholder_0] => 1059 [:db_insert_placeholder_1] => 1059 [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => cck:field_item_location:1059 [:db_insert_placeholder_4] => 1000 ) MySQLがこのタイプの負荷を処理できなかった場合、私は非常に驚きます。それで、私の質問は、データベースの問題ですか?これだけのトラフィックを処理できるようにMySQLを構成するにはどうすればよいですか? …

7
MySQLインデックス作成VarChar
blogentriesデータベースのインデックスを作成してパフォーマンスを向上させようとしていますが、問題が見つかりました。 ここに構造があります: CREATE TABLE IF NOT EXISTS `blogentries` ( `id_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL, `entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL, `date_id` int(11) NOT NULL, PRIMARY KEY (`id_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=271; 次のようなクエリは、インデックスを適切に使用します。 EXPLAIN SELECT id_id,title_id FROM blogentries ORDER …
10 mysql  varchar 

1
MySQLパーティショニング:パーティションの数と各パーティションのサイズの間にパフォーマンスのトレードオフはありますか?
効率的に分割したい大きなテーブル(数億行)があります。私の質問は、パーティションサイズとパーティション数の間にトレードオフがあるかどうかです。私が理解している限り、クエリは(ほとんどのクエリに対して)クエリに適用可能なパーティション内のみを検索する必要があるため、パーティションで使用される列に対するほとんどのクエリはより高速になります。したがって、効率を最大化するには、大きなテーブルを最大数のパーティションに分割する必要があるので、各パーティションをできるだけ小さくする必要があります。MySQLの場合、これは1024パーティションを意味します。しかし、多数のパーティションを持つことにはパフォーマンス上の欠点がありますか?そうであれば、どのようにして最適なパーティション数を見つけるのでしょうか? 注:stackoverflowについては多少似た質問がすでにありますが、(私の観点から)マークを逃す答えは1つだけです。だから私は私自身の方法で質問を述べます...うまくいけばそれはより明確です

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