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

複数のユーザーまたはプロセスがデータベースシステムの共有情報に同時にアクセスまたは変更するときに発生する問題についての質問。

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
PostgreSQL-複数のクエリを同時に実行すると、どのような状況で速度が向上しますか?どのような状況で減速が見られますか?
私はDBAではない人として謙虚にあなたにアプローチします。そして、私の質問は概念的な欠点と「それは地雷に依存している」に満ちていると確信しています。また、私が回答することを選択したすべての人が、私が現在提供できるよりも詳細な方法で多くのことを望んでいることもかなり確信しています。 とはいえ、私は一般的に次のシナリオに興味があります。 2つの重要なクエリがあるとします。 クエリ1の平均所要時間は2分です。 クエリ2の平均所要時間は5分です。 順次実行すると、平均して完了するまでに7分かかると思います。これは妥当ですか? ただし、2つのクエリを同時に実行するとどうなるでしょうか。同時に2つの別々の接続。 どのような条件下でスピードアップが見込めますか?(合計時間<7分) どのような状況下で減速が予想されますか?(合計時間> 7分) さて、1,000個の重要なクエリを同時に実行していると、全体的に速度が低下するという直感があります。その場合、ボトルネックはどこにあるでしょうか?プロセッサー?羊?ドライブ? 繰り返しますが、詳細を知らない限り、質問に正確に答えることはおそらく不可能であることを知っています(私は持っていません)。次の質問をするときに検討するいくつかの一般的なガイドラインを探しています: どのような状況下で、同時クエリによって全体的な速度が向上しますか? どのような状況で同時クエリが全体的な速度低下を引き起こしますか?

1
完全なブロッキングpostgresクエリを表示する方法は?
このページのステートメントを使用して、Postgresでクエリのブロックを表示しています SELECT bl.pid AS blocked_pid, a.usename AS blocked_user, ka.query AS blocking_statement, now() - ka.query_start AS blocking_duration, kl.pid AS blocking_pid, ka.usename AS blocking_user, a.query AS blocked_statement, now() - a.query_start AS blocked_duration FROM pg_catalog.pg_locks bl JOIN pg_catalog.pg_stat_activity a ON a.pid = bl.pid JOIN pg_catalog.pg_locks kl ON kl.transactionid = bl.transactionid AND kl.pid != …

1
SQL Server 2017およびAzure SQL DBでの既定の分離レベルの検索
トランザクションと並行性に関する本を読んでいます。1つの段落では、次のように述べられています。 オンプレミスのSQL Serverインスタンスでは、デフォルトの分離レベルはロックに基づいて読み取りコミットされています そして次の文は: SQLデータベースのデフォルトは読み取りです-行のバージョン管理に基づいてコミットされたスナップショット 私の質問は、これらの2つの文で「オンプレミスSQL Serverインスタンス」と「SQLデータベース」の違いは何ですか? デフォルトの分離レベルとは何ですか?どのようにして見つけることができますか?デフォルトの分離レベルを確認するための特別なクエリはありますか?

1
PostgreSQLのカウンターの同時増分
アイテムのリストとその使用法で構成されるプロジェクトの統計表を維持する必要があります(ページビューをカウントするWebサイトのようなものを考えてください)。アイテムがインスタンス化されるたびに、特定のアイテムの使用量を増やす必要があります。 私の最初の実装は: statistics( id integer NOT NULL, name character varying(255) NOT NULL, usage integer NOT NULL DEFAULT 0, ); UPDATE statistics SET usage = usage + 1 WHERE name = '<name>'; 私の懸念は、パフォーマンスと並行性についてです。更新プロセスは数十(おそらく80〜120)デバイスによってインスタンス化され、1秒あたり数回発生する可能性があるため、私の質問は次のとおりです。 1)このメソッドは同時実行性を維持しますか?(つまり、複数のデバイスが「同時に」更新を要求した場合、すべての要求がカウントされますか?) 2)結果を達成するための最良の方法を提案できますか?更新の書き込みには負荷がかかると思いますが、読み取りの方がはるかに頻繁です。値を増やす特定の機能はありますか?私は「シーケンス」を見ていますが、それが正しい方法であるかどうかはわかりません... アドバイスをよろしくお願いします

4
同時グループ予約の戦略は?
座席予約データベースを検討してください。nシートのリストがあり、それぞれに属性がありますis_booked。0はそうでないことを意味し、1はそうであることを意味します。それ以上の数でオーバーブッキングがあります。 オーバーブッキングを許可せずに複数のトランザクション(各トランザクションが同時にyシートのグループを予約する)の戦略は何ですか? 私は単にすべての未予約の座席を選択し、ランダムに選択されたyのグループを選択し、それらすべてを予約し、その予約が正しいかどうかを確認します(別名is_bookedの数が1を超えていない場合、座席を予約した別のトランザクションとコミット)、次にコミットします。それ以外の場合は中止して、再試行してください。 これは、Postgresで分離レベルのRead Committedで実行されます。

1
CTEが失われた更新を受け入れるのはなぜですか?
クレイグリンガーがコメントしたときの意味がわかりません。 挿入トランザクションがロールバックすると、このソリューションは更新が失われる可能性があります。UPDATEが行に影響を与えたことを確認するチェックはありません。 上https://stackoverflow.com/a/8702291/14731。失われた更新がどのように発生するかを示すイベントのサンプルシーケンスを提供してください(例:スレッド1がX、スレッド2がY)。

1
SQL Serverは、UPDATE中に新しい値と古い値の両方をどのように返しますか?
高い同時実行中に、意味のない結果を返すクエリの問題がありました-結果は、発行されるクエリのロジックに違反しています。問題の再現にはしばらく時間がかかりました。私は再現可能な問題を数握りのT-SQLにまで掘り下げました。 注:問題が発生しているライブシステムの部分は、5つのテーブル、4つのトリガー、2つのストアドプロシージャ、および2つのビューで構成されています。実際のシステムを簡略化して、投稿された質問をはるかに扱いやすいものにしています。物事が整理され、列が削除され、ストアドプロシージャがインラインになり、ビューが共通のテーブル式に変わり、列の値が変更されました。これは長い説明ですが、これはエラーを再現するものの、理解するのが難しい場合があることを示しています。なぜ何かがそのように構造化されているのか不思議に思わないでください。私はここで、このおもちゃモデルでエラー状態が再現可能に発生する理由を理解しようとしています。 /* The idea in this system is that people are able to take days off. We create a table to hold these *"allocations"*, and declare sample data that only **1** production operator is allowed to take time off: */ IF OBJECT_ID('Allocations') IS NOT NULL DROP TABLE Allocations CREATE …

4
SQL Serverのロックと同時実行性を理解するためのリソース
地雷のロックと同時実行性に関する最近の質問で実証されているように、ハードです。 中級から上級のSQL専門家がこれらについて徹底的に調査し、適切に学習することで、この領域に固有のすべての落とし穴をうまくナビゲートできるようにするための優れたリソースを提案できますか? チュートリアル、ブログ、マニュアルページ、PASSセッションなど、あらゆる種類のリソースを考えています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.