タグ

mySQLに関するkahkiのブックマーク (26)

  • MySQL即効クエリチューニング読んだ - $shibayu36->blog;

    MySQL即効クエリチューニング ThinkIT Books 作者:yoku0825インプレスAmazon 最近クエリチューニングの仕事があったので、少し深めに知ろうと読んだ。 MySQLの内部構造がどうなっているかは置いておいて、どうすればクエリの問題を把握できるかが素早く知れる良いだった。90ページくらいですぐ読めるのも良い。個人的にはHandler_%変数を使った調査、innotopによる状況可視化、sys.innodb_lock_waitsによるロック状況の可視化あたりが非常に参考になった。 ちなみにさらに内部構造に踏み込んで理解しようとするなら、以下の記事がおすすめ。 雑なMySQLパフォーマンスチューニング MySQL with InnoDB のインデックスの基礎知識とありがちな間違い - クックパッド開発者ブログ Rails Developers Meetup 2018 で

    MySQL即効クエリチューニング読んだ - $shibayu36->blog;
  • MySQLロックについて〜基礎編〜 を開催しました! - ANDPAD Tech Blog

    こんにちは!エンジニアの福間(fkm_y)です。 先日、弊社でデータベースの技術顧問をして頂いてる三谷(mita2)さんに開発部向けのMySQLロックのデータベース勉強会を実施したのでそのレポートをお伝えします。 開催背景 弊社では三谷さんによるデータベース勉強会を定期的に開催しています。以前にもロックに関するMySQL勉強会を開催していたのですが、1年半経過しており参加していない開発メンバーのほうが多くなっていたことやプロダクトの成長によりデッドロックなどのロックに起因する問題が目立ち始めていたことから増強版のMySQLロックのデータベース勉強会を開催することになりました。 概要 データベースのロックについて ロックタイムアウトについて デッドロックについて まとめ データベースのロックについて なぜデータベースにロック機構があるのかから知ることが重要です。性能と安全性を両立するためにあ

    MySQLロックについて〜基礎編〜 を開催しました! - ANDPAD Tech Blog
  • MYSQLのexport時に文字化けします。

    kahki
    kahki 2020/10/06
  • 【MySQL】InnoDBがクラッシュしたら at softelメモ

    InnoDBは通常、mysqldの起動時に自動修復を行うのですが、それが不可能な場合、エラーログに次のようなメッセージが記録されます。 InnoDB: You may have to recover from a backup. バックアップも取ってない…… そんなときは「innodb-force-recovery」を使ってみます。 my.cnfの[mysqld]のブロックに次のように記述します。 innodb-force-recovery = 1 こうすると、InnoDBの自動修復が行われず、mysqldが起動してくれます。 その後、mysqldumpでダンプを取り、mysqlを再インストールして、ダンプをインポートすれば、復旧完了です。 もしかしすると、データが一部欠損していたりする可能性もあります。クラッシュにもいろいろなケースがありますので、万能というわけではないと思います。 どう

    【MySQL】InnoDBがクラッシュしたら at softelメモ
    kahki
    kahki 2020/07/04
  • MySQL、Oracle、PostgreSQLで実行クエリ(SQL文)の履歴(ログ)を確認する - ITメモブログ

    以前に実行していたSQLを確認したい場面って、結構あるような気がします。 MySQLやshellのコマンドラインだと上や下のキーを押すことで履歴を1つずつ見れますが、過去にさかのぼって確認したい場合は、とても手間で作業効率が落ちる場合があります。 そんな時今までに実行されたクエリ(SQL文)の履歴を確認出来たら便利だと思い、自分が良く使う3つのデータベースのMySQL、PostgreSQLOracleに関して確認方法をまとめました。 MySQLで実行クエリの履歴を確認するためには、「.mysql_history」というログファイルの中身を確認する必要があります。実行したSQLが「.mysql_history」に都度書き出されている仕様です。 ログファイルの場所はデフォルトではホームディレクトリ(/home/[ユーザ名]/)の直下にあるはずです。 vimemacs、cat、lessなど各

    MySQL、Oracle、PostgreSQLで実行クエリ(SQL文)の履歴(ログ)を確認する - ITメモブログ
    kahki
    kahki 2020/07/02
  • MySQLで全てのクエリの確認 - Qiita

    実行環境:CentOS6.6, MySQL 5.7.11 MySQLで、クエリログを確認したい時に、下記の方法があります。 1. 実行しているクエリ: mysql> show full processlist\G; *************************** 6. row *************************** Id: <接続識別子、これは、INFORMATION_SCHEMA.PROCESSLIST テーブルの ID カラムの値> User: <発行したMySQLユーザー> Host: <発行しているクライエントのホスト名> db: <データベース名> Command: <コメンド種類:Query, Connect, Sleep等>。クエリの場合、Queryになる Time: <現在の状態どれだけ続いている(数秒)> State: <コメンドの状態:Sendi

    MySQLで全てのクエリの確認 - Qiita
    kahki
    kahki 2020/07/02
  • MySQLのNULLと空値でハマる - Qiita

    たとえば MySQL 5.6 hoge varchar(2) NULL可 100件のレコードのうち、10件がNULL、90件が"AA" select count(1) from tablename where hoge is null : 10件 → わかる select count(1) from tablename where hoge is not null : 90件 → わかる select count(1) from tablename where hoge = 'AA' : 90件 → わかる select count(1) from tablename where hoge = '' : 0件 → わかる select count(1) from tablename where hoge != '' : 90件 → !!!! 言い訳 ''自体がクソコードなわけですが、= '

    MySQLのNULLと空値でハマる - Qiita
    kahki
    kahki 2019/11/15
  • [MySQL]空文字 or NULL を一息で判別したかった話

    2018年8月21日に作成されたページです。 情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。 全件リストはこちら。 どもです。 MySQL初心者です。 カラムAにデータが入っていたらAを、入っていなかったらBの内容を取得したかったのですが、 「入っていない状態」は空文字とNULLの2パターンが想定される。 DB構成としてアカンくないか、NULL許容させんなや、などとツッコミはありますが、古いDBに文句言っても仕方ない。 さて、NULLと空文字が別物だってのは、MySQL初心者でも常識です。 NULLは「IS NULL」で、空文字は「=''」で指定、 と思ったのですが、「!=''」でNULLと空文字の両方を除外できると小耳に挟みました。 え、なにゆえ?? じゃあ「!=''」を使おう、とするには、そうなる理由がわからなくて怖い。 そう思っていましたら、こちらの

    [MySQL]空文字 or NULL を一息で判別したかった話
    kahki
    kahki 2019/11/15
  • MySQL5.6 を windows10 64bit版 に ダウンロード&インストール | WEPICKS!

    MySQL5.6 を Windows10 64bit版 にインストールして実行します。MySQL5.6ファイルのダウンロードからインストールの細かい手順まで紹介!初心者の方でもRDBMSのデータベースを自分のパソコンに構築してSQLで(Structured Query Language:データベース問い合わせ言語)で操作できるようになります。 MySQL5.6 ファイルのダウンロード Windows10 64bit版 OS にインストールする64bitバージョンのMySQL5.6バイナリファイルを公式サイトからダウンロードします。選択するファイルは、「Windows (x86, 64-bit), ZIP Archive」の「mysql-5.6.36-winx64.zip」です。ダウンロードすると「mysql-5.6.36-winx64.zip」のファイルがローカルに表示されます。

    kahki
    kahki 2019/11/15
  • 【備忘録】WindowsのMySQL(zip版)における初期セットアップについて - 学ぶに暇あらずと謂う者は

    kahki
    kahki 2019/11/15
  • Windowsでmysql5.7をzipインストールする - Qiita

    自分メモです。僕は、前職と家ではlinux mintで開発していたのですが、会社ではwindows(32bit)とmacが配られました。 windows機はメモリが足らず、仮想環境が入らない。 appleとは反りが合わない。 仕方なくwindows使っていたのですが、インストーラからインストールしたmysqlがmy.iniを読み込まず、苦戦したのでzipでインストールし直しました。という話です。 (クエリーログが見たかっただけなのですが。。。) また、会社のコンフルに書いていたメモ的なのを、qiitaに書いていくことにしたので、最初の投稿です。(コンフルってマークダウン使えないので、書く気が無くなるんですよね。。。) 参考資料 WindowszipファイルのMySQLをインストールする方法 ほぼこれじゃねぇか!!というツッコミもあるかと思います。はい。 手順 ここから落とす(32bit

    Windowsでmysql5.7をzipインストールする - Qiita
    kahki
    kahki 2019/11/15
  • MySQLの動的SQL使って検索するカラム名を動的に指定する - Qiita

    サービス・リニューアルの際のデータ移行とか、運用・保守フェーズなんかで、コマンドラインからデータベースの中身を調べてたりする時、しばしばSELECT句やWHERE句のカラムやテーブル指定を動的に行いたい!…というシーンに出くわす。 アプリケーション側の開発であれば、使用しているプログラム言語のメソッドを使ったり、OSのシェルコマンド使ったりしてSQLを動的に生成すれば対応するのは造作もないんだが、恒久的には発生しない一時的なデータ調査作業でそんな処理を書くのは非効率的で面倒でもある。 もうコンソールでDBにログインしてしまっているし…とかいうケースならなおさら、もうそのままSQLコマンドで完結してしまいたいものだろう。 そんな時に有効ななのが動的SQLだ。まぁ、ストアドプロシージャを使うという手もあるんだが、一回こっきり的な作業をそこまで大事(おおごと)にしたくもないっちゅーケースはままあ

    MySQLの動的SQL使って検索するカラム名を動的に指定する - Qiita
  • 【MySQL】AUTO_INCREMENTの値を変更する(確認する) at softelメモ

    問題 MySQLのAUTO_INCREMENTのカラムの開始の値を変更したいです。 答え 以下のSQLでできる。 ALTER TABLE xxxx AUTO_INCREMENT=100; 現状の確認は以下で SELECT auto_increment FROM information_schema.tables WHERE table_schema = 'ssss' and table_name = 'xxxx'; もしくは show table status like 'xxxx';

    【MySQL】AUTO_INCREMENTの値を変更する(確認する) at softelメモ
    kahki
    kahki 2019/07/19
  • MySQLの LAST_INSERT_ID の挙動について少し調べてみる - まるまるこふこふ

    一意なIDを取得するための採番テーブルを利用したかったのだが、 ベストプラクティスとして色んなサイトに書かれているやり方が以下。 update num set id = LAST_INSERT_ID(id + 1); select LAST_INSERT_ID(); だいたいやってることは理解できる(採番テーブルを更新して、更新後のデータをselect) のだが、 LAST_INSERT_ID ってなんじゃい?となったので調べてみた。 LAST_INSERT_IDを使って採番テーブルを扱う - (゚∀゚)o彡 sasata299's blog 上記の記事がわかりやすかった。 だが、そもそも適切なトランザクション管理してあれば LAST_INSERT_ID 使わなくてもよくない?って思ったのでちょっと検証してみる。 準備 mysql> CREATE TABLE num ( -> id big

    MySQLの LAST_INSERT_ID の挙動について少し調べてみる - まるまるこふこふ
    kahki
    kahki 2019/07/19
  • LAST_INSERT_IDを使って採番テーブルを扱う - (゚∀゚)o彡 sasata299's blog

    2009年07月06日22:54 MySQL LAST_INSERT_IDを使って採番テーブルを扱う 採番テーブルというのは、例えば同じ DB の違うテーブル(data_1テーブルとdata_2テーブルとか)で id を重複させたくない(つまり、data_1テーブル、data_2テーブルでは auto_increment は付けない)場合などに、ユニークな id を生成するためのテーブルです。こんな感じ。 CREATE TABLE num ( id bigint(20) unsigned NOT NULL DEFAULT '0' ) ENGINE=InnoDB; +-------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---

    kahki
    kahki 2019/07/19
  • mysqlのAUTO_INCREMENTは、mysql再起動で再計算される | 吉祥寺北口システム

    吉祥寺北ロシステム(屋号)は、webサイトや、業務システムなどの開発を寺沢幸雄がほぼ一人で請け負っています。個人事業主です プロフィール 最近の投稿 Threads埋め込みテスト 最近のSPAMはHTMLメール前提なことが多い 特定アカウントのInstagram投稿情報をサイトに表示する 8ビットパソコンのBASICでグラフィックを描いていた頃のエミュレートをjavascriptでする IT系、技術系の情報のクリップを蓄積したサイト 過去の投稿 2023年7月 (1) 2022年8月 (1) 2022年6月 (1) 2016年11月 (1) 2015年10月 (1) 2015年9月 (1) 2015年8月 (1) 2015年2月 (1) 2014年6月 (1) 2014年1月 (1) 2013年11月 (1) 2013年9月 (2) 2013年6月 (1) 2013年5月 (3) 2013

    mysqlのAUTO_INCREMENTは、mysql再起動で再計算される | 吉祥寺北口システム
    kahki
    kahki 2019/07/19
  • MySQL サーバーを再起動するとAUTO_INCREMENT の値が戻る - まるまるこふこふ

    InnoDB では AUTO_INCREMENT のカウンタはメモリ上に保持します。 14.6.5.1 従来の InnoDB の自動インクリメントロック https://dev.mysql.com/doc/refman/5.6/ja/innodb-auto-increment-traditional.html InnoDB テーブルに AUTO_INCREMENT カラムを指定すると、InnoDB データディクショナリ内のテーブルハンドルに、カラムに新しい値を割り当てる際に使用される自動インクリメントカウンタと呼ばれる特別なカウンタが含まれます。このカウンタは、ディスク上には格納されず、メインメモリー内にのみ格納されます。 InnoDB では、ai_col という名前の AUTO_INCREMENT カラムを含むテーブル t に自動インクリメントカウンタを初期化するために、次のようなアルゴ

    MySQL サーバーを再起動するとAUTO_INCREMENT の値が戻る - まるまるこふこふ
    kahki
    kahki 2019/07/19
  • 【MySQL】AUTO_INCREMENTの値が戻る@InnoDBエンジンのテーブル at softelメモ

    MySQLサーバー再起動の場合 まずこれ。 サーバーが再起動すると、auto_incrementの値が select max(id)+1 になってしまう。 InnoDB は、ai_col を名づけた AUTO_INCREMENT カラムを含むテーブル T に自動インクリメント カウンタを初期化する為に、次のアルゴリズムを利用します:サーバの起動の後で、テーブル T への最初の挿入をする為に、InnoDB はこのステートメントと同等な物を実行します: SELECT MAX(ai_col) FROM T FOR UPDATE; (中略) InnoDB はサーバが起動している限り、メモリ内の自動インクリメント カウンタを利用します。サーバが停止し再起動した時、先ほど説明があったように、InnoDB は、テーブルへの最初の INSERT に対する各テーブルのカウンタを再初期化します。 http:/

    【MySQL】AUTO_INCREMENTの値が戻る@InnoDBエンジンのテーブル at softelメモ
    kahki
    kahki 2019/07/19
  • MySQL 8.0でInnoDBのAUTO_INCREMENT問題解消を確認してみる - Qiita

    MySQLあるある」の1つ、「MySQLを再起動するとInnoDBテーブルのAUTO_INCREMENT値がレコードの最大値+1に巻き戻る件」が、MySQL 8.0(DMR)で解消されているということで、今更ですが実際に試してみました。 ※当は「透過的データ暗号化のその後」として、REDO/UNDOログの暗号化のほうを試そうかと思っていたのですが…MySQL 8.0.1以降で実装された機能はまだリリースされていませんでした。残念。Percona Live 2017の前に次のDMRがリリースされると良いのですが。 1. MySQL 5.7までの挙動 まず、テスト用のスキーマ/テーブル(いずれも名前は「test_ai」)を作成し、PK列としてAUTO_INCREMENT値が入るようにします。 # mysql -u root -h localhost -p Enter password: W

    MySQL 8.0でInnoDBのAUTO_INCREMENT問題解消を確認してみる - Qiita
    kahki
    kahki 2019/07/19
  • MYSQLのメモリ消費を設定1行で半減させた

    ※記事内に商品プロモーションを含む場合があります 9月始めより移行した現VPS。 サーバ監視用スクリプトも導入して、サーバの状況を時々見ています。 【関連】サーバのモニタリンクと異常通知用PHPスクリプトを作った 最近、メモリ使用率が何故か高いので、 ps auxで見てみたらMySQLの使用率が高めでした。 高いと言っても全体では40%ぐらいです。 しかし、WordPessのPHP処理が立て続けに入るとメモリを消費するので なるべく空き容量を開けてお必要があります。 そこで、いろいろ調べたらmy.cnfに1行追加するだけで 使用量が半減したので紹介します。 my.cnfへ設定1行で追加でメモリ使用が半減 設定前がメモリ使用率16%。 設定はすでにしてあるのでsystemctl restart mysql.serviceで再起動させます。 その後確認すると使用率は3.8%まで減りました。 サ

    MYSQLのメモリ消費を設定1行で半減させた
    kahki
    kahki 2018/10/17