ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 11 years ago

Closed 11 years ago

#2507 closed defect (fixed)

c_diary.public_flag に存在しえない値、 default を見ようとしている SQL がある

Reported by: ebihara Owned by: mori
Priority: minor Milestone: OpenPNE2.12.6
Component: 指定しない Version: 2.10.x & 2.12.x & 2.14.x
Keywords: OpenPNE2.10.12 OpenPNE2.13.4 Cc:

Description (last modified by ebihara)

■現象

c_diary.public_flag に存在しえない値、 default を見ようとしている SQL がある。

■原因

おそらくコードを修正していく過程で不要になった記述を除去し忘れたのではないかと思われる。

■修正内容

webapp/lib/db/bookmark.php の db_bookmark_diary_list関数、db_bookmark_diary_list_with_pager関数で作成されるSQL文を修正。 お気に入りの最新日記などの呼び出し元を表示することで動作確認を行った。

■関連情報

Change History (18)

comment:1 Changed 11 years ago by ebihara

Version: 2.12.x & 2.13.x

comment:2 Changed 11 years ago by ebihara

Milestone: OpenPNE2.12RC2OpenPNE2.10.7
Version: 2.12.x & 2.13.x2.10.x & 2.12.x & 2.13.x

comment:3 Changed 11 years ago by ebihara

Keywords: OpenPNE2.10.7 added
Milestone: OpenPNE2.10.7OpenPNE2.12.1

comment:4 Changed 11 years ago by imamura623

http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=17160

検証記事がありました

[当該箇所]
webapp/lib/db/bookmark.php内
関数db_bookmark_diary_list内でのSQL文
関数db_bookmark_diary_list_with_pagerでのSQL文

comment:5 Changed 11 years ago by ogawa

Keywords: OpenPNE2.13.2 added

comment:6 Changed 11 years ago by ebihara

Keywords: OpenPNE2.10.8 added; OpenPNE2.10.7 removed
Milestone: OpenPNE2.12.1OpenPNE2.12.2

comment:7 Changed 11 years ago by ebihara

Keywords: OpenPNE2.10.9 added; OpenPNE2.10.8 removed
Milestone: OpenPNE2.12.2OpenPNE2.12.3

comment:8 Changed 11 years ago by ebihara

Description: modified (diff)

comment:9 Changed 11 years ago by ebihara

Keywords: OpenPNE2.10.9 OpenPNE2.13.2 removed
Milestone: OpenPNE2.12.3

comment:10 Changed 11 years ago by ebihara

Keywords: OpenPNE2.10.12 OpenPNE2.13.4 added
Milestone: OpenPNE2.12.6

comment:11 Changed 11 years ago by mori

Owner: changed from nobody to mori
Status: newassigned

担当します。

comment:12 Changed 11 years ago by mori

Description: modified (diff)
Keywords: 確認中 added

comment:13 Changed 11 years ago by ebihara

Keywords: 差し戻し added; 確認中 removed

リビジョン番号を明記してください。

comment:14 Changed 11 years ago by mori

Keywords: 確認中 added; 差し戻し removed

以下のリビジョンを再修正しました。

comment:15 Changed 11 years ago by ebihara

Keywords: テスト待ち added; 確認中 removed

comment:16 Changed 11 years ago by toraneko

Descriptionに 「c_diary.public_flag に存在しえない値、 default を見ようとしている SQL がある。大きな障害はないがコードを修正すべきである。 」 とありますが、WHERE IN AND OR ORDER BY の組合せは、確実にMySQLをロックさせる悪玉のSQLですね!現にSlow Queryにもたくさん出ていますので。

Explainするとこうなります。

 explain SELECT c_diary.* FROM c_diary, c_member WHERE c_diary.c_member_id IN (4,5,6,7,8,9) AND ((c_diary.public_flag = 'public') OR (c_diary.public_flag = 'default' AND c_member.public_flag_diary = 'public')) AND c_diary.c_member_id=c_member.c_member_id ORDER BY r_datetime DESC\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: c_diary
         type: range
possible_keys: c_member_id,c_member_id_r_date,c_member_id_r_datetime,c_member_id_r_datetime_public_flag
          key: c_member_id
      key_len: 4
          ref: NULL
         rows: 1437
        Extra: Using where; Using filesort
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: c_member
         type: eq_ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: c_diary.c_member_id
         rows: 1
        Extra: Using where
2 rows in set (0.05 sec)

修正後のソースは、

$sql = 'SELECT c_diary.* FROM c_diary,c_member WHERE c_diary.c_member_id IN ('.$ids.') AND c_diary.public_flag = \'public\' AND c_diary.c_member_id=c_member.c_member_id ORDER BY r_datetime DESC';

となっているので、とりあえず上の状態よりは良くなっていますが、INの中が多くなるとまたSlow Queryに引っかかるようになると思います。

comment:17 Changed 11 years ago by ebihara

Description: modified (diff)
Descriptionに「c_diary.public_flag に存在しえない値、 default を見ようとしている SQL がある。大きな障害はないがコードを修正すべきである。 」とありますが、WHERE IN AND OR ORDER BY の組合せは、確実にMySQLをロックさせる悪玉のSQLですね!現にSlow Queryにもたくさん出ていますので。 

ご指摘の通りなので当該部分を削除しました。ありがとうございます。

comment:18 Changed 11 years ago by kiwa

Keywords: テスト待ち removed
Resolution: fixed
Status: assignedclosed

確認しました。問題ありません。

Note: See TracTickets for help on using tickets.