問題タブ [database-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - MySQL: インデックスを使用して大きなテーブルで更新を実行する
夜、
3,000 万行近くの大規模でシンプルなテーブルがあります。テーブルには、ほとんどの列のインデックスがあります。更新を実行するのに長い時間がかかります。テーブルへの変更が完了したら、インデックスを削除して再構築することをお勧めしますか?
私が質問する理由は、大きなテーブルでインデックスを再構築できなかった投稿をここで読んだことがあるためです。ただし、このテーブルを 2.2 GB のテキスト ファイルから 20 分でインポートできるため、その理由がわかりません。
テーブルは、いくつかの小さな int と varchar で構成されています。
私が実行した更新クエリは次のようなものでした:
それほど遅くはありませんでしたが、現在、フィールドの 1 つを varchar(4) から varchar(8) に変更していて、非常に長い時間がかかっています。
コマンドライン (Linux) から更新クエリを実行しました。
sql - SQLの削除ステートメントは非常に遅い
タイムアウトしているこのようなステートメントがあります:
私はこのように一度に1つずつやってみました:
これまでのところ、22分でまだ進行中です。
テーブルには260,000行あり、4列です。
なぜこれがとても遅いのか、そしてそれをどのようにスピードアップするのか、誰かが何か考えを持っていますか?WHEREを実行している[COL]には、一意ではない、クラスター化されていないインデックスがあります。SQL Server2008R2を使用しています
更新:テーブルにトリガーがありません。
database - MD5 値をデータベースに保存する
私たちのシステムでは、MD5 値の 16 進表現を使用しています。
それらを文字列ではなく整数として MySQL DB に格納するのが賢明でしょうか? MD5 列を使用したテーブルの検索が改善されますか?
ありがとうございました
mysql - 主キーは常にinnodbテーブルに追加する必要がありますか?
他のテーブルの主キーへの外部キーであるint列が2つしかないinnoDbsがいくつかあります。
たとえば、1つのテーブルはuser_itemsであり、userId、itemIdの2つの列があり、両方ともuserテーブルとitemテーブルへの外部キーであり、更新または削除されるとカスケードに設定されます。
そのようなテーブルに3番目の列を追加してそれを主キーにする必要がありますか、それともパフォーマンスやその他の利点の観点から、現在の状態の方が優れていますか?
mysql - mysql / innodbデータベースのサイズはパフォーマンスにどのように影響しますか?
mysql
すべてのテーブルがinnodb
エンジンを使用する30GBの大規模データベースがあります。このスペースのほとんどすべては、大きなテキストをバイナリ形式で格納する1つの大きなテーブル(約25 GB)によって占められていますが、クエリの99%は他の小さなテーブルを使用しています。
私のサーバーには16GBのRAMが搭載されており、システムのメモリが非常に不足しており、常にスワップを使用しているため、ユーザーに多大な苦痛を与えています。にinnodb_pool_buffer_size
設定しました6G
。
これらのテキストをデータベースからファイルシステムに移動することで、このパフォーマンスの問題を解決することを考えています。
ほとんどのクエリがこの大きなテーブルを使用しない場合、25 GBのテキストをファイルシステムに移動すると、この問題は解決しますか?最大のinnodbテーブルがクエリにあまり使用されていない場合でも、データベースのサイズはサーバーのパフォーマンスに影響しますか?
mysql - MySQLでの多次元ユークリッド距離計算を高速化
画像に関するデータを保存する次の表があります。
タスクは、収集されたデータ間の距離を計算することです。現在、データベースにストアドプロシージャとしてプログラムされた75次元(そうです、3 * 25 = 75)のユークリッド距離計算を使用しています。
別のサブルーチンを使用して、275-dim間の実際の距離を計算します。ベクトル:
そして、2つの値の差の2乗を計算する別のサブルーチン:
関数自体は完全に細かく、数学的にも論理的にも正しい決定論的な結果を返します。
問題は、特定の画像に「最も近い」画像、つまり特定の画像までの距離が最も短い画像を取得したい場合に発生します。そうするために、私は別の手順を使用します:
データベースには現在、約30.000枚の画像が含まれています。これは、aが終了するのCALL getSimilarImages(123, 10);
に約12秒かかることを意味します。これは、Webベースであろうとアプリケーションベースであろうと、どのアプリケーションにとっても長すぎます。
だから、私は物事をスピードアップしたいと思います。私のオプションは何ですか?距離を比較または計算する画像のプロセスを最適化する可能性はありますか?
手順の結果をキャッシュすることを考えましたが、その方法がわかりません。新しい画像が追加されるとすぐに、すべての画像を他のすべての画像と比較することもできますが、それでは画像が非常に長いプロセスで追加されるため、これも受け入れられません。
役立つ場合は、システムセットアップに関する詳細情報を提供できますが、ご提供いただけるアドバイスをいただければ幸いです。現在の状況は良くなく、私は本当に何かをする必要があります。なぜなら、イメージデータベースはシステムが稼働する時間ごとにしか大きくならないからです。
php - PHPを介したMySQLDBの意見
(初心者として)私が見逃しているもう1つの小さな点は、2つのDBの間にバックアップスクリプトがあり、最後のステップとして、実際のDBを最適化してオーバーヘッドのサイズを減らす必要があります。1つのDBのみを使用する場合に機能するコードがありますが、2つ使用する必要があります。
-これは、bckuserが無視されていることを示しているはずです...
actconn値:リソースID#1
bckconn値:リソースID#2
mysql_errorは言う:
SELECTコマンドがユーザー'bckuser'@'localhost' for table'actualtable'に対して拒否されました
私が何を間違えているのか分かりますか?
更新:actdbuserはそのDBのルートであるため、bckuserは何も実行しないでください。ただし、何らかの理由でSHOWTABLEが$actconnを認識しません...
UPDATE2:もう一度optを試しましたが、変更されたのは$ actdbname='db-name'だけです。作業中および$actdbname=' db-name
'仕様のアポストロフィを使用する場合。
これはsharedhostにあるため、DB名を変更できないことに注意してください。
@Corbinの興味深いアイデアに感謝します。試してみましたが、うまくいきませんでしたが、どうすればデバッグできますか?なんらかの理由で適切にデバッグすることすらできません...
sap-ase - Sybase ASEデータベースを最適化する方法は?
sybaseデータベースを最適化するための秘訣は何ですか?
すべきこととすべきでないことは何ですか?
database - postgresql データベース間のテーブルの高速転送
1 日ごとにパーティション分割されたデータを含む postgresql 運用 DB と、postgresql データ ウェアハウス DB があります。運用データベースから DWH にデータをすばやくコピーするために、テーブルをできるだけ速くコピーし、使用するリソースを最小限に抑えたいと考えています。テーブルは日ごとに分割されているため、各パーティションはそれ自体がテーブルであることがわかります。これは、マシン間でデータ ファイルを何らかの形でコピーし、それらのデータ ファイルを使用して DWH にテーブルを作成できるということですか? その場合のベストプラクティスは何ですか?
編集: ここで尋ねられたすべての質問に答えます: 1. ETL を構築しています。ETLの第一歩は、運用DBへの影響が少ないデータをコピーすることです。2. 運用 DB の書き込みが遅くならない場合は、データを複製したいと思います。3. もう少しデータを追加します。運用 DB は私の回答ではありませんが、主な関心事はその DB への書き込み時間です。1 日に約 5 億行を書き込みます。負荷の高い時間もありますが、まったく書き込みがない時間はありません。4. レプリケーション、pg_dump など、いくつかのツール/方法を見つけました。しかし、ツールを比較して、いつ何を使用するかを知り、自分のケースに何が適しているかを理解するものを見つけることができませんでした.
mysql - null を設定した後の MySQL VARCHAR の格納
いくつかの varchar(512) 列を持つ大きな MySQL InnoDB テーブルがあります。次に挿入される行は、以前に挿入された行に依存します。新しい行を挿入した後、以前に挿入された行の varchar フィールドは無意味な状態になります。以前に挿入された行は常に「処理済み」としてマークされていましたが (更新クエリを実行することによって)、varchar フィールドは消去されませんでした。このフィールドは索引付けされていません。以前の行のそのフィールドの値を null に設定する必要がありますか (メモリ節約の理由により)。