MySQLのexplainメモ
MySQLのExplain叩くたび指標を忘れてしまうのでメモ。
ほとんど引用文です(一番下の参考参照)。まず自分の頭に定着させたいものを抜擢した感じです。
とりあえずexplainしたときに見る列
- type
- rows
- extra
type:
ALL: フルテーブルスキャンされているので最高に遅い。
index: 一見するとインデックスが使われているような感じがする値だが、実はフルインデックススキャンされているということ。
rows:
行数が少ないほどいい
extra:
Using where: indexだけではwhereを解決できないことを示している
Using temporary: テンポラリーテーブルを作成することを示している。あまり良くない
Using filesort: レコードがクイックソートされていることを示す かなり良くない
もちろん後になればなるほど処理が重くなるので、出来るだけそのようなクエリはさけて1番目や2番目の実行計画になるようにすると良いわけである。
1番目や2番目の実行計画になるようにするには、次のような点に注意しなければいけない。
最も大切なことはWHERE句における検索条件とソートする対象のカラムを一つのテーブルに集中させることである。
表示されているとステキな値
Using index
他にも考慮すべきところ多々あると思うのですが、
少しずつ積み上げていこうと思います(毎度一気に詰め込もうとして結局全て流れてしまうので)
参考(引用元)
MySQLのexplainとかについてしらべたときのメモ
https://qiita.com/lastcat_/items/de7b530a94fbcf9ba646
explainした時の重要ポイント(実例つき)
http://www.24w.jp/blog/?p=250
漢(オトコ)のコンピュータ道
http://nippondanji.blogspot.com/2009/03/using-filesort.html
vimの使い方見直し
vimの復習
奇しくもvimconf当日(狙ったわけではない)
定期的に使い方は見直しているのだけど、繰り返さないと忘れたりして元の習慣に戻ってしまうので、
見直したいもの一旦整理
正規表現
vimの正規表現はややこしそうなので回避していたが、
vi使っているとき困ったので反省として(とはいっても自分はガッツリ正規表現する機会はあまりない。。)
# オプションの確認 (デフォルトはmagic) :set magic? /\(foo\|bar\) # \v以降がvery magicとして扱われる (vary magicを使うとパターン検索が楽になる) /\v(foo|bar) nnoremap / /\v
参考: Vimでパターン検索するなら知っておいたほうがいいこと
http://deris.hatenablog.jp/entry/2013/05/15/024932
ctrlSF
https://github.com/dyng/ctrlsf.vim
もともと入れていれていながら、以前試した際にあまり速度が出ずに使用を止めていたのだけど
最近試してみたらとても早い(gitに管理されているファイルを見ていたりする?マシンスペック?)
ので積極的に使っていきたい
(厳しかったら:ggrep 使おう)
特定の単語を数えたい( n:置換コマンドに置換させないオプション)
:%s/hoge//gn
参考 https://blog.kawa-xxx.jp/entry/20140511/1399818512
helpを積極的に読む
とはいっても用意されたhelpを闇雲に見るまでは今の所したくないので
参考: おすすめの :helpまとめ
http://cohama.hateblo.jp/entry/2013/07/28/235823
折りたたみ機能
自分はあまり使わないと思っていたけど
プラグインのhelpで使われているものあったので(開けなくて読めない)
za : 折りたたみの開閉
参考: vim標準機能の折りたたみを駆使して、.vimrcを整理しよう
https://qiita.com/jiro4989/items/12a41fb58cc42287092f
ブックマーク機能
以下のプラグインを使わせて頂いているのだけど
https://github.com/MattesGroeger/vim-bookmarks
ただ、このプラグインでマークしているのはよく使用しているファイル(たとえばconfigなど)で
作業中に一時的にマークしたい(たとえばサービス、モデルとかを往復するときなど)に使いづらかった
(一時的にマークしたいものと長期的にマークしたいものが混ざるので)。
のでvimのデフォルトのマークも併用して使用する(プラグインの方どうなっているかわからないけど挙動だけみるにかぶってなさそう)。
自分の用途的に基本的にグローバルでマークする形にしそう[A-Z]
かつ作業終わったら定期的に消していく
# mark一覧を表示する :marks # カーソル位置をmarkする # m[a-zA-Z] # マークを全消し :delmarks!
参考 Vimのマーク機能、使い方まとめ
https://qiita.com/syui/items/442fd0905a1f2005c10e
TODO ここらへんいい感じにmap定義したい
map noremap
vimrcに定義しているのに説明できない(パクってきたものなので)のはよくないと思い
基本noremapでよさげ(プラグインで定義されたものはmap)
参考: 【図解Vim】mapとnoremap
https://cocopon.me/blog/2013/10/vim-map-noremap/
set nu 入れる
何かの記事を見て意図的に行数を表示していなかったのだけど以下の理由で設定変更
・helpがどれくらいあるか把握できる
・エラーの位置に飛びたい
・カウントするとき位置を把握できる(:%s/hoge//gn でそれぞれの位置の行数が把握できる。なんとなく把握しておきたい)
TODO (気が向いたときに調べる)
先読み後読み
http://d.hatena.ne.jp/unk_pizza/20140311/p1 https://qiita.com/mochizukikotaro/items/84f3ab2740b8efbe0dc6
クリップボード
たまに挙動で混乱する。どういうときに困るか忘れた。困ったときにまた確認 http://labs.timedia.co.jp/2014/09/learn-about-vim-in-the-workplace.html
ansible触ってみようとしたらvagrantのエラーにハマった(`nfs_export': wrong number of arguments (given 4, expected 5) )
ansible勉強しようとvagrant立ち上げようとしたら以下のエラーでハマった
/opt/vagrant/embedded/gems/2.1.2/gems/vagrant-2.1.2/plugins/hosts/bsd/cap/nfs.rb:11:in `nfs_export': wrong number of arguments (given 4, expected 5) (ArgumentError)`
その他にもいろいろ出たが、これだけが原因わからない。 調べてもそれっぽいのがこれしか出ない https://github.com/hashicorp/vagrant/issues/7655
vagrantとvitual boxを入れ直したらなおったらしいが自分の環境では直らず。。
試したこと
- ansibleの設定ファイルの確認
- vagrantfileのPrivate ipなどを変えてみる
- vagrant global-statusで他に立ち上がっていないかチェック
- Dockerを落とす
- vagrant 入れ直し
- vitualbox 入れ直し
結果~/.ssh/configをすべてコメントアウトしたら動いた (多分古い設定が邪魔していた)。
でvagrant 立ち上げてansibleのプレイブックを適用してnginxを動かそうと試みるがつながらず、
あたり確認したが問題なさげ。 ipかぶっているのかと思い、一旦vagrant haltしてからprivate ip変えて立ち上げようとしたら また最初と同じエラーが(ip戻しても変わらず) ただ、気づかなかったがvagrant ssh で接続自体はできる。 かつnginxもつながった。
ただvagrant ssh ではいると以下のようなエラーがでるので、 仮想マシンは立ち上がったけど、何かがこけているっぽい? ただ一応ansible動かす環境はできているように見えるので一旦よかった (合間を見つけてエラーは解消したい)
sh: netsh: command not found sh: cscript: command not found It seems that you don't have the privileges to change the firewall rules. NFS will not work without that firewall changes. Execute the following commands via cmd as administrator: ...
プレイブック適用した影響か、原因はよくわかっていないが切り分けのためにも saharaでvagrant 環境をロールバックできるようにしたほうがよさげ (今エラー出るやつも一旦box消していい気がするけどまた動かなくなったらと思うと怖いな。。)
https://qiita.com/muyuu/items/99df9135676f0f95f7e9
もともとはネットに転がってるプレイブックを探してさくっとlamp環境作ろうとしたのだけど全然うまく行かず 問題の切り分けに時間がかかってしまった(コツコツやったほうが近道だったぽい)。
Vagrantd(CentOS7)でnginx 2
先日は静的ファイル(index.html)を表示させたので、phpを動かそうと思ったが思いの外はまった。
今回は勉強用に試しているだけだったので適当なバージョンのPHPをインストール
sudo yum -y install epel-release wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm sudo rpm -ivh ./remi-release-7.rpm sudo yum install --enablerepo=epel,remi-php70 php php-mcrypt php-mbstring php-fpm php-mysqlnd php-opcache php-apcu
nginxの設定修正
sudo vim /etc/nginx/conf.d/default.conf
location ~ \.php$ { #root html; root /var/www; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; include fastcgi_params; }
phpfpmの設定修正
sudo vim /etc/php-fpm.d/www.conf
;user = apache user = nginx ;group = apache group = nginx
# nginx と php-fpmを再起動し、設定を反映 sudo systemctl restart nginx sudo systemctl restart php-fpm
/var/www/配下にindex.phpを作成
<?php phpinfo();
http://192.168.33.10/index.php を叩くとphpinfoの画面でなく、index.phpファイルがダウンロードされる。
ここで原因がわからずはまる
実施したこと
* nginxのログファイルの権限を変える
* index.phpの権限を変える
* selinuxのチェック
* /etc/nginx/conf.d/default.conf , /etc/php-fpm.d/www.confの設定ファイルのチェック
(設定の誤り以外にもシンタックスエラーに一度気づかなかったのでチェックしておくこと
sudo systemctl status php-fpm.service (sudoをつけると詳細にエラーをだしくてれるっぽい)
nginx -t (こちらはsudo つけると正しく動くのにつけないとエラー出るケースが有ったのでつけないほうがいいかもしれない*権限系のエラー?よくわかっていない)
シンタックスエラーの状態で起動しようとすると結構分かりづらいエラーが表示されるので気をつけていたほうがよさそう
- choromeで見ていた場合キャッシュで反映されない場合があるようなので別のブラウザなどで試す
- nginxのerror.logを見る
原因としては先日書いた
/etc/nginx/nginx.confの設定のserverディレクティブが悪さをしていた(こいつをコメントアウトすればindex.phpが表示された)。
# server { # listen 80; # server_name test.example.com; # root /var/www/; # # location / { # } # # }
無意識にあとから書いたディレクティブが上書きするものと思っていた。
nginx.confが最初に読み込まれる設定ファイル。これが他の設定ファイルを読み込む
include /etc/nginx/conf.d/*.conf;
新しい設定追記するときは
conf.d/default.confに追記するのが正しい。
以下のコマンドを叩くとincludeされたファイルを展開して設定ファイルの内容を1本の設定ファイルとして表示できる
sudo nginx -T
参考
PHP - nginxサーバへphpファイルにアクセスするとダウンロードされてしまう|teratail
Vagrant + CentOS7 + nginx + PHP7 + php-fpm でFuelPHP1.8の仮想開発環境を構築する | 空想ブログ
[Sy] 【解決した】HomebrewでNginx + php-fpmの環境を作ろうとしたらPHPファイルがダウンロードされる | Syntax Error.
Vagrantd(CentOS7)でnginx
前々からやりたいと思いながらできていなかったので触り始めメモ。
いくらでも記事出るだろうけど、自分の忘備録用。
vagrantは簡単に動き見てみたいときに即興でできるのがいい。
ただ久々に触るとどこに何のVagrantfileがあったか忘れるので以下のコマンドで確認
vagrant global-status
まずは静的ファイルを見れるようにしてみる。
nginx の導入(CentOSのデフォルトのリポジトリには入っていないとのこと)
CentOS7 に nginx導入
設定ファイル修正
sudo vi /etc/nginx/nginx.conf
httpのディレクティブ内に以下を追記
server { listen 80; server_name static.example.com; root /var/www/; location / { } }
# 文法チェック sudo nginx -t # 起動 sudo systemctl start nginx
/var/www配下に適当にidnex.htmlを作りアクセスするが繋がらない http://192.168.33.10/
nginxの方にもログが出ていなかったようなので selinuxの確認
$getenforce Disabled
firawallを無効にすると表示された
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --reload
こう繋がらないとき当てずっぽうなのなんとかならないかな。
参考
Vagrant + CentOS7 + nginx + PHP7 + php-fpm でFuelPHP1.8の仮想開発環境を構築する
初プルリクとdockerメモ
他人のリポジトリにプッシュする場合はforkしてからでないといけない (もしくは権限をもらう) blog.qnyp.com
基本権限もらう形でやってたので、ちょっと混乱した。
また、今回docker-compose upでビルドした際にエラーが出力されたのだけど、 エラーの解決より再現に手こずった。
症状と対応は以下と同じなので割愛
E: Package 'libpng12-dev' has no installation candidate · Issue #1 · deskpro/deskpro-docker · GitHub
一度docker-compose.ymlを修正して、ビルドを通した後に もう一度エラーを再現しようとしても再現できず。 キャッシュまわりを疑ったりコンテナを削除したりしたけれども再現できず イメージを削除すると再現できた
docker images -aq | xargs docker rmi
イメージをベースにコンテナが生成されるらしいが、 ここらへんもう少し自分の中で整理したい