- 負荷テストは、予想されるトラフィックの下でシステムが目標を満たしているかどうかをチェックします。
- ストレステストは、限界点を見つけて回復するための能力を超えています。
- ツールは通常同じです。異なるのは、目標とトラフィック パターンです。
- 平均値には重大な問題が隠れている可能性があるため、結果は p95 や p99 などのパーセンタイルで判断してください。
アプリケーションは 10 人のユーザーに対して完全に動作します。 1万個の場合、発売日には何が起こるでしょうか? 負荷テストとストレス テストでは、これに答えるための 2 つの異なる方法について説明しています。これらを混同すると、テストが行うと考えられていることが証明されないことになります。
このガイドでは、それぞれが何を示すか、関連するテストの種類、結果の見方について説明します。シミュレートされた数値を使用して、Python 3.13 で以下の小さなパーセンタイルの計算を実行しました。 k6 スクリプトは説明のための例であり、私たちが実行したものではありません。ユーザー数とターゲットは作成されたものであるため、独自のものに置き換えてください。大量のトラフィックは攻撃のように見え、実際の停止を引き起こす可能性があるため、これらのテストは自分が所有するシステムまたはテスト権限のあるシステムに対してのみ実行してください。
短い答え
負荷テストでは、予想されるトラフィックを処理でき、実行中に目標を達成できるかどうかが問われます。 ストレス テストでは、失敗する前にどれだけ耐えられるか、どのように失敗するか、そしてどれくらい早く回復するかが問われます。
橋を思い浮かべてください。負荷テストでは、予想される数のトラックを走行させ、問題がないことを確認します。ストレス テストでは、その限界を知るために重みを追加し続け、最初に警告を発するかどうかを確認します。幸いなことに、ソフトウェアは橋を壊すよりも安価に壊れます。
負荷テストとストレス テストを並べて実行する
| アスペクト | 負荷テスト | ストレステスト |
|---|---|---|
| 主な質問 | 予想される負荷で目標を達成できますか? | どこで、どのようにブレイクするのでしょうか? |
| トラフィックレベル | 通常から予想されるピークまで | 予想されたピークを超えた |
| パターン | 加速し、安定を保つ | 失敗するまで増やし続ける |
| 失敗 | 失敗したテスト | 期待される結果 |
| 主要な指標 | 応答時間、スループット、エラー | 限界点、故障モード、回復時間 |
| 一般的なタイミング | 各メジャーリリースまたはイベントの前に | システムが負荷の下で安定した後 |
| 結果 | 目標に対して合格または不合格 | 能力制限と弱点リスト |
負荷テストとは何ですか?
負荷テストは、予想される現実的なトラフィックをシミュレートし、システムがどのように動作するかを測定します。たとえば、「同時ユーザー 500 人の場合、チェックアウト リクエストの 95% が 800 ミリ秒以内に完了し、エラーは 1% 未満である」などのテスト対象が必要です。
これが k6 スクリプトとしてどのように見えるかを次に示します。 k6 テストは JavaScript で記述されており、thresholds ターゲットを合格または不合格の結果に変換します。
import http from "k6/http";
import { sleep } from "k6";
export const options = {
stages: [
{ duration: "5m", target: 500 }, // ramp up
{ duration: "20m", target: 500 }, // hold at expected peak
{ duration: "2m", target: 0 }, // ramp down
],
thresholds: {
http_req_duration: ["p(95)<800"],
http_req_failed: ["rate<0.01"],
},
};
export default function () {
http.get("https://staging.example.com/products");
sleep(1); // think time, as real users pause
}
sleepが重要です。考える時間もなく、各仮想ユーザーは継続的にサーバーにアクセスし、同じ数の実際の人間が発生するよりもはるかに多くのトラフィックを生成します。
ストレステストとは何ですか?
ストレステストは意図的に予想レベルを超えます。あなたは通過しようとしているわけではありません。次のような質問に対する答えが必要です。
- どのレベルからパフォーマンスが低下し始めますか?
- データベース、アプリケーション サーバー、またはサードパーティの呼び出しのうち、どのコンポーネントが最初に失敗しますか?
- 明らかなエラーが発生して正常に失敗しますか? それともクラッシュしてデータが失われますか?
- トラフィックが減少した場合、自動的に回復しますか?
export const options = {
stages: [
{ duration: "5m", target: 500 }, // expected peak
{ duration: "5m", target: 1000 }, // beyond it
{ duration: "5m", target: 2000 }, // further
{ duration: "5m", target: 4000 }, // likely to break
{ duration: "10m", target: 0 }, // recovery: does it come back?
],
};
最後の回復段階は忘れられがちですが、最も価値のある段階である可能性があります。障害には適切に対処できても、手動で再起動しないとシステムが回復しない場合でも、誰かが夜中に修理しなければならないシステム停止が発生することになります。理想的には、極度の負荷の下では、システムは制御された方法で作業を中断し、タイムアウトするのではなく明確な 503 応答 を返す必要があります。
スパイク、ソークなどの種類
負荷テストとストレス テストは、より広範なパフォーマンス テストに属します。
| 種類 | パターン | 何が見つかるか |
|---|---|---|
| スモーク(パフォーマンス) | 数人のユーザーについて簡単に説明すると、 | スクリプトとシステムがまったく機能するかどうか |
| ロード | 予想ピーク、ホールド | 目標が達成されているかどうか |
| ストレス | 容量を超えて増加 | 限界と故障モード |
| スパイク | 突然のジャンプ、そしてドロップ | 自動スケーリングとキューの動作 |
| ソーク(持久力) | 数時間にわたる通常の負荷 | メモリリーク、接続不足 |
| 容量 | 徐々に増加 | ターゲット内の最大負荷 |
ソーク テストは、ショート テストでは決して検出されない問題を検出します。小規模なメモリ リークは、20 分間は無害に見えますが、サービスがダウンするのは 2 日後です。スパイク テストは、フラッシュ セールなど、トラフィックが徐々に増加しないイベントに適しています。
重要な指標
| メトリック | 意味 | 注意してください |
|---|---|---|
| 応答時間 (パーセンタイル) | リクエストにかかる時間 | p95とp99が上昇 |
| スループット | 1秒あたりに処理されるリクエスト数 | ユーザー増加に伴うフラット化 |
| エラー率 | 失敗したリクエストの割合 | あらゆる突然の上昇 |
| CPUとメモリ | サーバーリソースの使用量 | 飽和、または安定した成長 |
| データベース | 遅いクエリ、接続プールの使用 | プールが枯渇し、ロックが待機します |
| キューの深さ | 処理待ちの作業 | 決して枯渇することのない成長 |
平均値が誤解を招く理由
平均値は、実際の人々が不満を抱いている遅いリクエストを隠します。これを示すために、100 件の応答時間をシミュレートし、95 件が高速 (80 ~ 200 ミリ秒)、5 件が非常に遅い (2.5 ~ 4 秒) ものとし、一般的な統計を計算しました。
import math, random, statistics
random.seed(3)
times = [random.randint(80, 200) for _ in range(95)] \
+ [random.randint(2500, 4000) for _ in range(5)]
def pct(values, p):
values = sorted(values)
return values[math.ceil(p / 100 * len(values)) - 1]
print("avg", round(statistics.mean(times)), "p50", pct(times, 50),
"p95", pct(times, 95), "p99", pct(times, 99), "max", max(times))
# avg 302 p50 150 p95 199 p99 3740 max 3896
その数字をよく見てください。平均 302 ミリ秒では、誰も記述されていません。一般的なリクエストには約 150 ミリ秒かかりましたが、遅いリクエストには 3 秒以上かかりました。 p95 でさえ 199 ミリ秒では正常に見えますが、p99 だけが問題を明らかにします。 p95 のような数字は、リクエストの 95% がこの速度以上であることを意味します。
そしてリクエストの 1% は珍しいことではありません。ページが 50 件のリクエストを行う場合、p99 が遅いとページビューの大部分に影響を与えます。自分にとって重要なパーセンタイルに目標を設定し、複数のパーセンタイルを一緒に検討します。
ヒント: グラフ内の「膝」を探してください。負荷が増加すると、応答時間はしばらく横ばいになりますが、その後突然上昇し、スループットの増加が止まります。その時点があなたの実際的な能力であり、実際に何かがクラッシュするずっと前にそれが起こることがよくあります。
ツール
| ツール | スクリプト作成 | で知られています |
|---|---|---|
| k6 | JavaScript | 開発者に優しい、CI に合わせたしきい値 |
| Jメーター | GUIとXML | 成熟しており、多くのプロトコルをサポートしています |
| ガトリング | Scala、Java、Kotlin など | コードベースで効率的 |
| イナゴ | パイソン | シンプルな Python ベースのユーザー動作 |
これらのいずれでも、負荷テストとストレス テストの両方を実行できます。機能リストを追いかけるのではなく、チームのスキルに合ったものを選択してください。パイプラインで使用するには、CI/CD とはを参照してください。
テストを計画する方法
- 目標を設定します。 実際の分析を使用してピーク時のトラフィックを見つけ、目標を定義します。
- ジャーニーを選択します。 閲覧、検索、チェックアウトなどの現実的なユーザー行動を現実的な比率でモデル化します。ホームページにアクセスするだけでは、ほとんど意味がありません。
- 現実的な環境を使用します。 小さなステージング サーバーでは本番環境を予測できません。相違点がある場合は注意してください。
- データを準備します。 100 行で高速なクエリは 1,000 万行でクロールされる可能性があるため、現実的なボリュームを使用します。
- 人々に警告します。 運用チームおよび第三者に通知し、誤って決済プロバイダーの負荷テストを行わないでください。必要に応じて外部サービスをモックします。
- 小規模から始めます。 まず小規模なスモーク テストを実行して、スクリプトが機能することを確認します。
- すべてを監視します。 サーバー指標がなければ、速度が低下したことはわかりますが、なぜはわかりません。
- 繰り返します。 修正するたびに再度実行し、比較するベースラインを保持します。
結果を読む
| 症状 | 考えられる原因 |
|---|---|
| 応答が遅いが、CPU が低い | データベース、ロック、または外部サービスを待機しています |
| データベースのCPUが高い | インデックスの欠落または非効率なクエリ |
| 突然の接続エラー | 接続プールまたはファイルの制限に達しました |
| 記憶力は着実に上がっていきます | リークまたは無制限のキャッシュ |
| ロードジェネレータのCPUが高い | ボトルネックはシステムではなくテストツールです |
データベースが一般的なボトルネックとなるため、クエリが問題となっている場合は、SQL クエリの最適化 に関するガイドをお読みください。テーブルの最後の行は重要な罠です。負荷を生成しているマシンの健全性も常にチェックしてください。
よくある間違い
- ユーザーとリクエストを混同する。 ターゲットが同時ユーザーを意味するのか、1 秒あたりのリクエストを意味するのかを明確にしてください。
- 思考時間を省きます。これによりトラフィックが増大し、誤解を招く結果が生じます。
- テストが遅すぎます。 発売の 1 週間前になると、アーキテクチャの問題を修正する時間がありません。
- 単一エンドポイントの使用。 実際のトラフィックには、読み取り、書き込み、検索が混在します。
- キャッシュによりすべてが隠蔽されます。 同じリクエストを繰り返してもキャッシュがテストされるだけの可能性があるため、データを変更してください。
- テストは 1 回のみ。 リリースごとにパフォーマンスが変化するため、定期的にテストを実行します。
まとめ
負荷テストを実行して、予想されるトラフィックを処理できることを確認し、ストレス テストを実行して、処理できない場合に何が起こるかを確認します。小規模から始めます。最も重要なユーザー ジャーニーを選択し、明確な目標を 1 つ設定し、モニタリングをオンにしてステージングに対して短いテストを実行します。通常、最初の実行で何かを学び、そこから構築することができます。
よくある質問
負荷テストとストレス テストの主な違いは何ですか?
負荷テストでは、設定されたターゲットに対して予想されるトラフィックの下での動作をチェックします。ストレス テストは限界点を見つけ、システムがどのように回復するかを判断するために能力を超えます。
負荷テストとストレス テストを最初に実行する必要がありますか?
最初に負荷テストを行います。予想されるトラフィックの下でシステムが目標を達成したら、ストレス テストを実行してその限界を調査します。ストレスの結果は、不安定なシステムではほとんど意味がありません。
ストレステストとスパイクテストの違いは何ですか?
ストレス テストでは通常、障害が発生するまで段階的に負荷を上げます。スパイク テストでは、システムが突然の変化にどのように対処するかを確認するために、突然高いレベルにジャンプします。
p95 の応答時間はどれくらいですか?
これは、リクエストの 95% がその時間以下に終了したことを意味します。これは、ほとんどのユーザーのエクスペリエンスを平均よりも正確に表しています。
本番環境で負荷テストを実行できますか?
許可、監視、すぐに停止する方法があれば、慎重に行うことができます。ほとんどのチームは、実際のユーザーへのリスクを軽減するために、運用環境に似たステージング環境から始めます。
学び続ける
テスト、WordPress、または SEO についてサポートが必要ですか?
私たちは、チームがより優れたソフトウェアを出荷し、サイトを成長させるのを支援します。あなたが取り組んでいることを教えてください。明確な次のステップを提案します。
詳しいガイドはこちら テスト、AI、最新の開発
この記事は気に入りましたか?トピックを選択して、最新のチュートリアルに直接アクセスしてください。
AI 幻覚の説明: 言語モデルが物事をでっち上げる理由とそれを軽減する方法
AI 幻覚について説明しました。幻覚とは何か、言語モデルが幻覚を生成する理由、一般的な種類、グラウンディングとプロンプトで幻覚を軽減する方法、そして私たちが実行した簡単なチェックです。
記事を読む →DevOps環境変数の説明: .env ファイル、シークレット、および設定が正しく行われている
実行した Python の例を使用して環境変数について説明します。環境変数の読み取りと設定、すべての値が文字列である理由、.env ファイル、プロセスの継承、シークレット、検証について説明します。
記事を読む →ソフトウェア開発API レート制限の説明: アルゴリズム、ヘッダー、および 429 エラーの処理
API レート制限については、実行したシミュレーションで説明します。トークン バケット、固定ウィンドウ、スライディング ウィンドウ、429 応答、レート制限ヘッダー、バックオフによる再試行、およびテスト制限です。
記事を読む →テスト自動化Python でのモッキング:unittest.mock、patch、およびテストを嘘にする間違い
Python でのunittest.mockによるモック、テスト済み: モックとreturn_value、side_effect、名前が使用されている場所のパッチ、仕様と自動仕様、日付のモック、およびよくある間違い。
記事を読む →ソフトウェアテストコードカバレッジの説明: 回線カバレッジとブランチカバレッジ、および 100% の実際の意味
実際のcoverage.pyの実行でコードカバレッジを説明: 行、分岐、条件のカバレッジ、レポートの読み取り、100%のカバレッジでもバグを見逃す可能性がある理由、および賢明なターゲット。
記事を読む →データベースとSQLSQL における DELETE、TRUNCATE、DROP: 違い、ロールバック、およびそれぞれをいつ使用するか
DELETE、TRUNCATE、DROP について、テスト済み SQL を使用して説明します。それぞれの削除内容、ロールバック、トリガー、ID リセット、速度、PostgreSQL、MySQL、SQL Server、SQLite の違いについて説明します。
記事を読む →データベースとSQLSQL ビューの説明: 作成、使用、落とし穴の回避、例を示します
SQL ビューについて、実行したクエリとともに説明しました。ビューの作成、ライブ結果、列の非表示、パフォーマンス、更新可能なビューと具体化されたビュー、壊れた依存関係、ベスト プラクティスについて説明します。
記事を読む →ソフトウェア開発TypeScript インターフェイスと型: 実際の違い、コンパイラでテスト
TypeScript インターフェイスと型、実際のコンパイラでチェック: 両方でできること、片方だけでできること、宣言のマージ、拡張と交差、および従うべき簡単なルール。
記事を読む →ソフトウェア開発Python *args と **kwargs の説明: 柔軟な関数と明確な例
Python の *args と **kwargs について、実行したコードで説明しました。パッキングとアンパッキング、パラメーターの順序、キーワードのみの引数と位置のみの引数、デコレーター、一般的なエラーです。
記事を読む →ソフトウェア開発Python Lambda 関数: 構文、実際の用途、および使用すべきでない場合
Python のラムダ関数について、実行したコードとともに説明します。構文、キーによるソート、マップとフィルター、クロージャー、遅延バインディング トラップ、通常の def がより適切な選択である場合。
記事を読む →人工知能AIエージェントとは何ですか?シンプルなエージェント ループを実行できる仕組み
AIエージェントとは何ですか?エージェント ループ、ツール、メモリ、ガードレール、実行した小さな Python ループ、実際のリスク、およびシンプルなチャットボットがより良い選択である場合についてのわかりやすいガイドです。
記事を読む →DevOpsモニタリングと可観測性: ログ、メトリクス、トレースによる本当の違い
モニタリングと可観測性について説明: 既知および未知の障害、ログ、メトリクスとトレース、チェックアウト インシデントのウォークスルー、ゴールデン シグナル、OpenTelemetry、および便利なアラート。
記事を読む →DevOpsDocker ボリュームとバインド マウント: コンテナ データを正しい方法で保持する
Docker ボリュームとバインド マウントについて説明します。コンテナ データが消える理由、名前付きボリューム、バインド マウント、tmpfs、Compose の例、バックアップ、アクセス許可、およびそれぞれをいつ使用するかについて説明します。
記事を読む →テスト自動化TDD と BDD: 主な違い、1 つの機能が両方の方法で構築され、それぞれをいつ使用するか
TDD と BDD は、両方の方法で構築された 1 つの割引機能で説明されています。実行したコードによるレッド-グリーン-リファクタリング、Given-When-Then シナリオ、ツール、トレードオフ、およびそれぞれをいつ使用するかです。
記事を読む →ソフトウェアテストユーザー受け入れテスト (UAT): プロセス、チェックリスト、および実際の例
ユーザー受け入れテストの説明: 誰が実行するか、QA との違い、7 段階のプロセス、UAT テスト ケース テンプレート、チェックリスト、サインオフ基準、およびよくある間違い。
記事を読む →データベースとSQLSQL NULL 値の説明: IS NULL、COALESCE、NULLIF、および回避すべきトラップ
SQL の NULL 値について、実行したクエリで説明しました。3 つの値のロジック、IS NULL、COALESCE、NULLIF、集計、結合、並べ替えでの NULL の扱い方、およびそれが密かに引き起こすバグです。
記事を読む →データベースとSQLSQL CASE WHEN ステートメント: 構文、実際の例、およびよくある間違い
SQL CASE WHEN では、単純な検索フォーム、条件順序、SUM を使用したピボット、COUNT トリック、カスタム並べ替え、更新、回避すべき NULL トラップなど、実行したクエリを使用して説明しました。
記事を読む →ソフトウェア開発JWTとは何ですか? JSON Web トークンを実際の例で説明する
JWTとは何ですか? JSON Web トークンについて説明しました。3 つの部分、実行したコード内で構築および改ざんされたトークン、JWT とセッション、ストレージ、リフレッシュ トークン、およびセキュリティ上の間違いです。
記事を読む →ソフトウェア開発JavaScript イベントループの説明: コールスタック、マイクロタスク、タイマーと例
JavaScript イベント ループについて、実行したコードで説明しました。コール スタック、タスク キュー、マイクロタスク キュー、setTimeout 0 が即時ではない理由、ブロッキング、スターベーション、およびインタビュー クイズです。
記事を読む →ソフトウェア開発Python ジェネレーターと収量の説明: 実際の例でメモリを節約する
Python ジェネレーターと Yield について、実行したコードを使用して説明します。一時停止と再開の方法、メモリ節約の測定、パイプライン、無限シーケンス、Yield from、send、および一般的なトラップについて説明します。
記事を読む →人工知能埋め込みとは何ですか?ベクトルとコサインの類似度を簡単に説明
埋め込みとは何ですか?ベクトル、コサイン類似度、セマンティック検索に関する平易なガイド。私たちが実行した小さな例、一般的な使用法、モデルの選択、既知の制限が含まれています。
記事を読む →DevOpsBlue-Green デプロイメントと Canary デプロイメント: 違い、トレードオフ、および選択方法
ブルー グリーン デプロイメントとカナリア デプロイメントについて説明: それぞれの仕組み、コスト、リスクとロールバック、テストした安定したユーザー バケット化、データベース移行、ローリング アップデート、および選択方法。
記事を読む →テスト自動化不安定なテスト: 問題の原因とそれを永久に修正する方法
不安定なテストについては、私たちが実行したデモを使用して説明しました。主な原因、確認および診断する方法、タイミングの適切な修正、共有された状態と日付、隔離プロセスなどです。
記事を読む →ソフトウェアテスト負荷テストとストレス テスト: 違い、メトリクス、および k6 の例
ロード テストとストレス テストについて説明します。それぞれが何を証明するか、スパイク テストとソーク テスト、重要な指標、平均値が誤解を招く理由、K6 の例、テストの計画方法について説明します。
記事を読む →ソフトウェアテストテスト ケースとテスト シナリオ: 主な違い、例、およびそれぞれをいつ使用するか
テスト ケースとテスト シナリオの説明: 明確な定義、並べて表、シナリオからケースへの 1 つのパスワード リセット機能、テンプレート、およびそれぞれをいつ使用するか。
記事を読む →データベースとSQLSQL クエリの最適化: 実行プランを読み取り、タイミングを考慮して遅いクエリを修正
SQL クエリの最適化は 100 万行でテストされています。実行プランの読み取り、適切なインデックスの追加、検索対象外のフィルターの修正、複合インデックスとキーセットのページネーションの使用。
記事を読む →データベースとSQLSQL UNION と UNION ALL: 違い、例、テストされたパフォーマンス
SQL UNION と UNION ALL について、実行したクエリで説明しました。重複、両方に従うルール、実際のデータのバグ、測定されたパフォーマンス、INTERSECT と EXCEPT、およびそれぞれをいつ使用するかについて説明します。
記事を読む →ソフトウェア開発JavaScript Fetch API チュートリアル: GET、POST、エラー処理、タイムアウト
ローカル サーバーに対してテストされた JavaScript Fetch API チュートリアル: GET と POST、404 がスローされない理由、再利用可能なヘルパー、クエリ文字列、タイムアウト、CORS、およびよくある間違い。
記事を読む →ソフトウェア開発Python ファイル処理: 読み取り、書き込み、CSV、JSON、パスライブラリと例
Python のファイル処理について、実行したコードで説明します。オープン モード、大きいファイルの読み取り、CSV、JSON、パスライブラリ、バイナリ ファイル、安全な書き込み、エラー処理、およびよくある間違いについて説明します。
記事を読む →ソフトウェア開発Python のクラスとオブジェクト: 実際の例を含む OOP チュートリアル
Python のクラスとオブジェクトについて、実行したコードとともに説明します: __init__、メソッド、クラスとインスタンスの属性、継承、プロパティ、ダンダー メソッド、データクラス、およびよくある間違い。
記事を読む →人工知能大規模言語モデルとは何ですか? LLM の仕組みを誇大広告なしで説明
大規模言語モデルとは何ですか? LLM は、トークン、エンベディング、アテンション、トレーニング、温度およびコンテキスト ウィンドウ、小さな次の単語のデモ、実際の制限など、平易な言葉で説明されています。
記事を読む →DevOps初心者のための Linux コマンド: 例を含む基本ターミナル ガイド
初心者向けの Linux コマンド。ナビゲーション、ファイル、ログの表示、grep、パイプ、権限、プロセス、アーカイブなどのタスク別にグループ化されており、実用的なログ分析の例も含まれています。
記事を読む →テスト自動化Selenium と Playwright: 主な違い、コードの比較、どちらを選択するか
Selenium と Playwright の比較: アーキテクチャ、待機、ブラウザと言語のサポート、デバッグ、両方のツールでの同じテスト、移行のアドバイスと選択方法。
記事を読む →ソフトウェアテスト等価性分割: テスト設計手法を実際の例で説明
等価性パーティション化について説明しました。有効なパーティションと無効なパーティションを見つける方法、年齢、パスワード、クーポンに関する実際の例、実行したテスト、境界と組み合わせる理由。
記事を読む →ソフトウェアテストソフトウェアテストにおける重大度と優先度: 相違点、マトリックス、および実際の例
ソフトウェア テストにおける重大度と優先度について説明します。明確な定義、例を含む 4 方向のマトリックス、レベル スケール、それぞれの設定者、バグ トリアージの実行方法。
記事を読む →データベースとSQLSQL サブクエリのチュートリアル: 型、相関サブクエリ、および EXISTS と例
実行したクエリを含む SQL サブクエリのチュートリアル: スカラー、IN、FROM、SELECT サブクエリ、相関サブクエリ、EXISTS、NOT IN NULL トラップ、サブクエリ対 JOIN 対 CTE。
記事を読む →データベースとSQLSQL トランザクションと ACID の説明: COMMIT、ROLLBACK、分離レベル
SQL トランザクションと ACID について、実行した銀行振込で説明しました。COMMIT、ROLLBACK、セーブポイント、ロック、分離レベル、ダーティ リード、デッドロック、ベスト プラクティスについて説明します。
記事を読む →ソフトウェア開発Git mergeとrebaseの違い:例と使い分け
Git mergeとrebaseの違いを、実際のログ出力、比較表、rebaseの黄金律、安全なチームワークフローで解説します。
記事を読む →ソフトウェア開発Pythonのリスト内包表記:構文・例・使うべきでない場面
Pythonのリスト内包表記を解説:構文、フィルタ、if-else、ネストしたループ、実測した処理時間、そして通常のforループの方が良い場面。
記事を読む →データベースとSQLSQL JOINを例で解説(Inner・Left・Right・Full)
サンプルのテーブルとクエリでSQL JOINを順に解説。INNER、LEFT、RIGHT、FULL、CROSS、SELFに加え、よくある間違いとパフォーマンスのコツも紹介します。
記事を読む →