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

InnoDB:MySQLのACID準拠のストレージエンジン

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 # …

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
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を設定する必要がありますか?

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 …

2
原因不明のInnoDBタイムアウト
最近、いくつかの非常に基本的な更新がタイムアウトし、原因を特定できませんでした。例: //#Query_time:51 Lock_time:0 Rows_sent:0 Rows_examined:0 UPDATE photos SET position = position + 1 WHERE (photo_album_id = 40470); 同じログには、Lock_time> 0のエントリはありshow innodb statusません。実行しても、関連するロックは明らかになりません。この問題は、私のアプリケーションサーバーログ(Mysql::Error: Lock wait timeout exceededmysql-slowログの対応する各エントリに関連するエラーを示す)に基づいて、少なくとも5つの異なるテーブルに影響しているようです。 ここからどこへ行くべきかについてのアイデアはありますか?私はあらゆる方向に行き止まりを打っています。ありがとう。 編集: CREATE TABLE `写真`( `id` int(11)NOT NULL auto_increment、 `type` varchar(255)NOT NULL、 `photo_album_id` int(11)NOT NULL、 `user_id` int(11)NOT NULL、 `title` varchar(255)default 'Untitled'、 「説明」テキスト、 `credit` varchar(255)デフォルトはNULL、 `photo_file_name` …

5
テーブルの行サイズと最大行サイズを計算する
問題: テーブルの作成に使用されるバイト数を計算する方法はありますか?information_schema.tablesからいくつかの情報を取得できますが、その情報は十分に正確ではありません。 実際に必要なのは、innodbのみのテーブルの定義によるバイト数であり、照合はutf-8-general-ciと見なすこともできます。 たとえば、テーブルテストは次のようになります。 テーブルテストの作成 ( col1 varchar(25)、 col2 int、 col3 varchar(3)、 col4 char(15)、 col5 datetime )); これで、テーブルの列のタイプに応じて1つの行に累積できる合計行サイズを知る必要があります。 MSSQLで同様のソリューションを見つけたが、MySQLバージョンが必要 任意のテーブルの行サイズを推定するスクリプト どんな助けでも大歓迎です。

1
MySQL InnoDB Deadlock for 2つの単純な挿入クエリ
この2つの挿入クエリにはデッドロックがあります。 insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.596', 180, 4, 181, 561) insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.611', 180, 4, 181, 563) InnoDBのステータスは次のとおりです。 ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2014-12-23 15:47:11 1f4c *** (1) TRANSACTION: TRANSACTION 19896526, ACTIVE …
10 mysql  innodb  deadlock 

4
mysql innodbデータベースのテーブル名+各テーブルのレコード数を表示する
現在のデータベース内のすべてのテーブルを、テーブルの行数とともにリストする方法。 言い換えれば、mysqlでこのようなものを作成するクエリを考えることができますか? +------------------------++------------------------+ | Tables_in_database | Number of rows | +------------------------++------------------------+ | database 1 | 1000 | | database 2 | 1500 | +------------------------++------------------------+ さまざまなアプローチを歓迎します。
10 mysql  innodb  select  count 

3
.ibd、.frm、およびmysqllogbinファイルからのMySQLテーブルの復元
何らかの理由で、(MySQLまたはphpmyadminに関係なく).frmと.ibdファイルに保存されている自分のテーブルを開こうとすると、構文エラーが表示されるか、存在しないと表示されます。 これと同様の問題があった他の投稿を読みましたが、innodb_file_per_table有効になっているかどうかを確認する方法がわからず、全体的に本当に混乱しています。また、mysql-bin.000002ファイルのコピーをtxtファイルに変換したので、データベースのデータが完全に失われていないことがわかります。 データベースは昨年作成されました。これらのmysql-bin.00000ファイルは6つありますが、なんらかの理由で.000002最大です。現在、すべてのデータベースの.ibdおよび.frmファイルがありますが、MySQLに、または少なくとも読み取り可能なものに復元する方法について、私は途方に暮れています。 Windows 2003 ServerでWampServer 2.4とMySQL 5.6.12を使用しています。また、InnoDBでプラグインをダウンロードする必要がありますか?

3
mysqldump --single-transaction、それでも更新クエリはバックアップを待機しています
mysqldump --single-transactionを使用する場合、ドキュメントによると、読み取りロックでテーブルをフラッシュして一貫した状態を取得し、トランザクションを開始する必要があります。ライターは待機していません。 しかし、私は昨夜、次の状況に遭遇しました: show fullプロセスリストからの抜粋: 何百もの... Command: Query Time: 291 State: Waiting for table flush Info: insert into db_external_notification..... 次にこれ: Command: Query Time: 1204 State: Sending data Info: SELECT /*!40001 SQL_NO_CACHE */ * FROM `db_external_notification` 残りのスレッドはスリープ状態です これらの挿入が何を待っているのか誰かが何か知っていますか?クエリを待機させるFLUSHテーブル、DDL、またはマニュアルに記載されているものはありません。 mysqldumpコマンド全体 mysqldump --quick --add-drop-table --single-transaction --master-data=2 -uxx -pxx dbname 私は--quickはここでは冗長であると思います、おそらく以前の時間からの残り物です、このスクリプトは非常に古いですが、何も害しないはず

3
大きなバッチの挿入速度
私のアプリケーションでは、INSERTにかなりの時間がかかっているようです。テーブルに挿入するオブジェクトがメモリ内に多数(約40〜50,000)あります。 サンプルテーブルを見てみましょう CREATE TABLE bill ( id BIGINT(20) PRIMARY KEY, amount INT(11) DEFAULT 0, bill_date DATETIME DEFAULT NOW(), INDEX (bill_date) ) ENGINE=InnoDB 私のバッチサイズとして3行を取ると、以下は挿入するために考えられるアプローチです アプローチ1-3つのrawインサートを作成して起動する INSERT INTO bill (amount, bill_date) VALUES (10, '2012-01-01 00:00:00'); INSERT INTO bill (amount, bill_date) VALUES (20, '2012-01-02 00:00:00'); INSERT INTO bill (amount, bill_date) VALUES (40, '2013-02-05 …
10 mysql  innodb  insert  java  jdbc 

1
InnoDB:MLOG_CHECKPOINTがないためにREDOログを無視する
私はmysqlバージョン5.7.14(OS X El Capitanでの自作インストール)を使用しています。mysqlの実行中にシステムが正常にシャットダウンせず、mysqlデーモンを起動しようとしたときに再起動した後、以下のエラーが発生しました。 2017-02-07T10:11:42.224506Z 0 [Note] mysqld (mysqld 5.7.14) starting as process 18234 ... 2017-02-07T10:11:42.227375Z 0 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive 2017-02-07T10:11:42.228809Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 2017-02-07T10:11:42.228821Z 0 [Note] InnoDB: Uses event mutexes 2017-02-07T10:11:42.228826Z 0 [Note] InnoDB: …

3
一括削除後にmysqlテーブルのインデックスを再作成する必要がありますか?
MySQLに、毎秒多くのINSERTとSELECTを実行するテーブルがあります。そして、1日に1回、古いデータの一括削除があります。削除後にテーブルのインデックスを再作成する必要がありますか?性能を上げたい。誰かがいくつかのヒントを提案できますか?ストレージエンジンとして「innodb」を使用する。変更する必要がありますか?同時挿入と選択の方が良いと思います。あなたの提案をお願いします。インデックスの再作成を行う必要がありますか? 前もって感謝します..

1
MySQL:大きな列に対する一意の制約
VARCHAR最大3071文字を保持できる列を含むInnoDBテーブルを作成しようとしています。UNIQUEこの列のデータに制約を課したいのですが。 MySQLはインデックスを使用して制約を強制しているようです。InnoDBでは、インデックスサイズは767バイトに制限されているように見えます- VARCHAR(3071)データを保持している列には十分ではありません。 最大データ長やInnoDBの使用に妥協することなく、データベースにデータの一意性を強制する方法についての考えはありますか?

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