MySQLで長時間実行中のクエリを特定し、強制終了する方法

処理に時間がかかっているクエリを調べる

MySQLでは、SHOW PROCESSLISTステートメントを使って現在実行中のスレッドを確認できます。
このコマンドは、各スレッドのID、ユーザー名、実行中のクエリなど、重要な情報を提供します。
Infoフィールドでは、クエリの最初の100文字が表示されます。
すべてのクエリを表示するには、SHOW FULL PROCESSLISTを使用します。

mysql> show processlist;
+---------+-----------------+------------+-------+---------+---------+------------------------+----------
| Id      | User            | Host       | db    | Command | Time    | State                  | Info     
+---------+-----------------+------------+-------+---------+---------+------------------------+----------
| 5483780 | admin           | localhost  | my_db | Execute |     490 | executing              | select ...

この例では、Idが5483780のスレッドが490秒間実行中であることがわかります。
これは、パフォーマンスの問題を引き起こしている可能性があります。

処理に時間がかかっているクエリを強制終了する

長時間実行中のクエリを強制終了するには、KILL processlist_id ステートメントを使用します。
このコマンドは、指定したプロセスIDのスレッドを即座に終了させます。

Idが5483780のスレッドを終了する場合は、以下のようにします。

mysql> kill 5483780;

参考

LaravelのHTTPテストのassertSeeで文字列がエスケープされないようにする

問題

LaravelのHTTPテストで、assertSeeやassertSeeTextを使って、HTMLの中に特定の文字列が含まれていることをテストすることがあります。

しかし、デフォルトでは、これらのメソッドはHTMLエスケープされた文字列を検索するため、意図した通りにテストが通らないことがあります。

例えば、次のようなコードを書いて、HTMLの中に<h1>hello</h1>の文字があるかどうかをテストすると、失敗します。

// コントローラーのサンプルアクション
public function index() {
    return view('welcome', ['message' => '<h1>hello</h1>']);
}

// テストケース
public function testExample() {
    $this->get('/')
        ->assertSee('<h1>hello</h1>');
}

この失敗の理由は、assertSee メソッドがデフォルトでHTMLエスケープされた文字列を検索するためです。

解決策

この問題に対処するには、assertSeeassertSeeTextメソッドに第二引数としてfalseを渡します。

これにより、メソッドはHTMLエスケープされた文字列の検索を行わなくなり、生のHTMLタグの存在を確認できるようになります。

// テストケース
public function testExample() {
    $this->get('/')
        ->assertSee('<h1>hello</h1>', false);
}

この変更により、LaravelはHTMLタグをエスケープせずにそのままの形でテスト対象の文字列として認識し、期待通りのテスト結果を得ることができます。

参考

asdfを使ってPythonとPoetryをインストールする

概要

asdfを使用してPythonとPoetryをインストールする手順を説明します。

まずはmacOSにasdfをインストールする方法を確認しましょう。こちらの記事を参考にしてください。

Pythonのインストール

  1. Pythonプラグインを追加

    Pythonプラグインをインストールするには、次のコマンドを実行します。

    % asdf plugin add python
    
  2. 利用可能なPythonバージョンの確認

    インストール可能なPythonバージョンを確認するには、次のコマンドを実行します。

    % asdf list all python
    
  3. .tool-versionsファイルを編集

    プロジェクトディレクトリに .tool-versions ファイルを作成し、インストールするPythonのバージョンを指定します。

    python 3.11.6
    

    ファイルの内容を確認します。

    % cat .tool-versions 
    Python 3.11.6
    
  4. Pythonをインストール

    .tool-versionsファイルのあるディレクトリで、以下のコマンドを実行します。

    % asdf install
    

    指定したバージョンのPythonがインストールされます。
    インストールが成功したことを確認するために、以下のコマンドを実行します。

    % python --version
    Python 3.11.6
    

Poetryのインストール

  1. Poetryプラグインを追加

    Poetryプラグインをインストールするには、次のコマンドを実行します。

    % asdf plugin-add poetry
    
  2. 利用可能なPoetryバージョンの確認

    インストール可能なPoetryバージョンを確認するには、次のコマンドを実行します。

    asdf list all poetry
    
  3. .tool-versionsファイルを編集

    .tool-versionsファイルにPoetryのバージョンを追記します。

    python 3.11.6
    poetry 1.7.1
    

    注意: .tool-versionsファイルの改行コードはLFであることを確認してください。

  4. Poetryをインストール

    .tool-versionsファイルのあるディレクトリで、以下のコマンドを実行します。

    % asdf install
    

    指定したバージョンのPoetryがインストールされます。
    インストールが成功したことを確認するために、以下のコマンドを実行します。

    % poetry --version
    Poetry version 1.7.1
    

以上で、asdfを使用してPythonとPoetryをインストールする手順が完了しました。

Homebrewを使ってmacOSにasdfをインストールする

概要

Homebrewを使用してmacOSにasdfをインストールする手順を説明します。
asdfは、複数のプログラミング言語のバージョン管理ツールです。
これを使えば、簡単に異なるバージョンの言語ランタイムを切り替えることができます。

手順

公式サイトの手順を参考にして、Homebrewを使ってmacOSにadsfをインストールします。

  1. Homebrewをインストールする

    Homebrewをインストールします。Homebrewはパッケージ管理ツールで、コマンドラインからさまざまなソフトウェアを簡単にインストールできます。
    Homebrewのインストール方法は、公式サイトを参考にしてください。

  2. asdfをインストールする

    Homebrewを使って、asdfを簡単にインストールできます。以下のコマンドを実行します。

    brew install asdf
    
  3. asdfを設定する

    asdfをインストールしたら、~/.zshrcに必要なコードを追加します。
    以下のコマンドを実行して、設定を追加します。

    echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
    

    このコマンドは、asdfの設定をシェルの設定ファイルに追加します。
    設定を反映させるために、ターミナルを再起動してください。

    zsh以外のシェルを使用している場合の設定方法は、asdfの公式サイトを参考にしてください。

  4. インストールを確認する

    インストールが正常に完了したか確認するために、以下のコマンドを実行します。

    asdf version
    

    ターミナルにasdfのバージョンが表示されれば、インストールが成功しています。

これで、macOSにasdfが正常にインストールされ、使用できるようになりました。
詳細な情報やドキュメンテーションは、asdfの公式サイトを参照してください。