2018 10,27 00:32 |
|
今の現場でデットロックが起きたようで
なんでか、こっちに軽く飛び火 はっきり言って、そういう設計だから、そうなるんだよって話がある 今回起きた原因としては、SELECT FOR UPDATEの部分のようで 詳しくソースを追っていないので、正直原因は分かりません。 ただ、「SELECT FOR UPDATE」という文法を、何も考えずに使うとはまりそうなので 今後のために残す。 (基本、この文法はあまり使わないです、私は) 当然ながら、MyISAMでは利用できない これが、うっかり忘れそう トランザクションの中で利用しないと、SELECT FOR UPDATEをした時に行ロックがかかりません。結果、普通のSELECTと変わらなくなってしまいます。
ちょっと考えれば、当然ですよね。UPDATEするんだもん。 でも、SELECTと記述しているから、トランザクションを忘れることもありそうなので。 一意に取得できないクエリを発行したりすると、ギャップロックやネクストキーロックが発生する(簡単に言うと、特定範囲の行が一気にロックされる)ことがあるようです。 なので、ロックした後は、速やかに情報を更新してコミットする。 SELECT FOR UPDATEをしている時点で、結構更新頻度が高めのテーブルを操作しているはずです。例外発生時などに、きちんとrollback等で後始末をしないと、デッドロックが起こってパフォーマンスが落ちます。 PR |
|
2018 10,16 22:17 |
|
久しぶりに
テーブルの変更を行うにあたり、グループIDごとに採番する必要が出てきたので その方法を調べていました。 既にIDというAUTO INCREMENTでPKのカラムがあるけど、それとは別で採番 参考にさせて頂いたブログ http://www.umikabuto.com/blog/archives/5909 UPDATE target as t1
INNER JOIN
(
SELECT tA.group_id, COUNT(tA.group_id) AS seq, tA.id AS dmyid
FROM target as tA, target as tB
WHERE tA.group_id = tB.group_id AND tA.id >= tB.id
GROUP BY tA.group_id, tA.id
) as t2
ON t1.id = t2.dmyid
SET t1.seq = t2.seq; へぇ~、updateでもjoinできるんだ、初めて知った ってか、使う用途がなかったからなぁ ためになったなぁ |
|
2018 05,15 00:26 |
|
Smartyで、エスケープしないってことが、ごく稀にあり
ごく稀過ぎて、忘れる。 久しぶりにやったので、ここに残しておこう。 ちなみに、Smarty2系です ■ 個別にエスケープ処理を指定する場合
{$test|escape:"html"}
■Smartyクラスで全ての変数にエスケープ処理を指定している場合です。
配列で設定すれば、複数の修正子を設定することができます。
$smarty->default_modifiers = array('escape:"html"');
変数に対して「smarty:nodefaults」を指定します。
{$test|smarty:nodefaults}
上記のように指定すれば、エスケープ処理されずに出力することができます。
■ default_modifiers(使うかな?)
テンプレート内で使用する全ての変数に適用する修飾子を指定します。
指定したものはデフォルトで適用されるようになります。
$smarty->default_modifiers = array('', '');
|
|
2018 05,07 23:23 |
|
2018 05,07 23:21 |
|
忍者ブログ [PR] |