久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线

Discuz! 官方交流社區

標題: X3.4 forum_post 主鍵問題 [打印本頁]

作者: cordless    時間: 2023-2-14 21:43
標題: X3.4 forum_post 主鍵問題
要試升3.5發現我的 forum_post 這兩個主鍵順序跟 X3.5的是相反的順序,

維持這樣的順序有沒有問題?
另外如果沒有問題可以手動新增其他欄位然后略過升級程序對 forum_post的修改嗎?
因為每次收集都會被修改成bak.

(, 下載次數: 0)


作者: 專家    時間: 2023-2-14 23:24
有問題,不可以是這個順序,而且哪個Discuz版本也不會給這個順序。
你一定是以前參考過某些網上的錯誤教程把這個順序給換了。換了之后可以在InnoDB以及云數據庫上不報錯,但是進數據庫里的數據將全部會是錯的。
雖然一般也能用,但所有查詢這個表的業務性能會受到嚴重影響。樓層越多影響越大。
作者: cordless    時間: 2023-2-16 16:41
這可能要再改回MyISAM才能對調順序,
我可以只改 forum__post 這個表成MyISAM其他表繼續維持innodb嗎?
作者: hopejyb    時間: 2023-2-16 21:04
我也是X3.4升級上來的,查了一下我的數據表,和你一樣的順序,但現在使用正常的,我的論壇200多萬主題3000多萬帖子。
升級當時也是給改為_bak了,我手動做了修改,進論壇之后先前的主題回復會出現丟帖子(不顯示舊帖子,只顯示新帖子),我查了是position的問題,手動修復了,其后把position的default值0改為NULL,發帖就正常了,現在正常運行。
`position` int(10) unsigned NOT NULL,
PRIMARY KEY (`position`,`tid`),

升級之前就已經是InnoDB引擎。
作者: 專家    時間: 2023-2-16 22:16
hopejyb 發表于 2023-2-16 21:04
我也是X3.4升級上來的,查了一下我的數據表,和你一樣的順序,但現在使用正常的,我的論壇200多萬主題3000 ...

position 和 tid 反過來理論上好像能用,但最好別這么干,目前系統是按tid position設計的,反過來可能會導致性能下降,尤其是在大量用戶同時使用以及單帖超高樓層的場景下。有條件的話最好還是換過來。
作者: hopejyb    時間: 2023-2-16 22:32
專家 發表于 2023-2-16 22:16
position 和 tid 反過來理論上好像能用,但最好別這么干,目前系統是按tid position設計的,反過來可能會 ...

謝謝。我找時間調下,主要是帖子表太大了,動一次起碼1小時以上,得找個合適的時間。
作者: cordless    時間: 2023-2-16 22:36
hopejyb 發表于 2023-2-16 22:32
謝謝。我找時間調下,主要是帖子表太大了,動一次起碼1小時以上,得找個合適的時間。 ...

在innodb下好像調不過來,一直報錯,
所以我才想改回MyISAM來改.
要是改成了麻煩通報下方法,謝謝.
作者: 專家    時間: 2023-2-16 23:09
本帖最后由 專家 于 2023-2-16 23:12 編輯
cordless 發表于 2023-2-16 22:36
在innodb下好像調不過來,一直報錯,
所以我才想改回MyISAM來改.
要是改成了麻煩通報下方法,謝謝. ...

你得先把position的auto increment去掉……

注意,去掉以后這張表就不能在3.4正常運行了,只在升級的時候才可以這么做
作者: cordless    時間: 2023-2-17 01:55
專家 發表于 2023-2-16 23:09
你得先把position的auto increment去掉……

注意,去掉以后這張表就不能在3.4正常運行了,只在升級的時候 ...

好的謝謝
作者: stonys    時間: 2023-2-17 08:47
專家 發表于 2023-2-16 23:09
你得先把position的auto increment去掉……

注意,去掉以后這張表就不能在3.4正常運行了,只在升級的時候 ...

使用過3.4 的innodb方案。
Discuz! X2.5/X3-X3.4  InnoDB數據庫補丁 beta1.0.8 【2017.8.1更新】
http://www.9999xn.com/thread-12049-1-1.html


舊帖子的postion與pid相同,不知道對性能有沒有影響?
作者: cordless    時間: 2023-2-17 17:27
專家 發表于 2023-2-16 23:09
你得先把position的auto increment去掉……

注意,去掉以后這張表就不能在3.4正常運行了,只在升級的時候 ...

我試了把數據從innodb 轉回 MyISAM發現tid這欄的基數變大了幾千,
position 的基數變成空值,如果再做上下次序對調,tid變成空的,position的基數是剛剛tid的基數.
這樣正常嗎?試了發帖都正常就是了.
作者: 專家    時間: 2023-2-17 17:30
cordless 發表于 2023-2-17 17:27
我試了把數據從innodb 轉回 MyISAM發現tid這欄的基數變大了幾千,
position 的基數變成空值,如果再做上下 ...

auto increment去掉就不需要轉回myisam了啊……理論上可以直接對調索引里的tid和position了

之前使用對調過的tid和position肯定會產生不少錯誤數據,因此數據上有點異常應該問題不大,之后產生的數據就沒有問題了。
作者: 專家    時間: 2023-2-17 17:35
stonys 發表于 2023-2-17 08:47
使用過3.4 的innodb方案。
Discuz! X2.5/X3-X3.4  InnoDB數據庫補丁 beta1.0.8 【2017.8.1更新】
https:/ ...

position的正確數值應該是當前樓層的樓層號,和pid相同的話就不對了。
系統無法根據position快速檢索樓層,就會回退到用pid計數的方式,降低性能。
但如果后續產生的數據沒有錯的話,后續的數據是不受影響的,還可以根據position快速檢索。

不過按理說老版本innodb方案不應該有這個問題啊……雖然我沒用過,但是我之前看過它的實現原理,不應該樓層號寫錯的。可能是你那邊配置出錯了?
作者: stonys    時間: 2023-2-17 22:32
專家 發表于 2023-2-17 17:35
position的正確數值應該是當前樓層的樓層號,和pid相同的話就不對了。
系統無法根據position快速檢索樓層 ...

有沒辦法重新更新一下positon樓層號?

作者: 專家    時間: 2023-2-18 22:00
stonys 發表于 2023-2-17 22:32
有沒辦法重新更新一下positon樓層號?

這個不太好弄,因為有必要更新的post表,量往往很大,重寫難度高。
可以考慮自制一個腳本將總樓層數非常多的帖子的position重寫一下。對同一個tid,按pid從小到大依次從1開始給position就行了。
作者: cordless    時間: 2023-2-19 01:46
專家 發表于 2023-2-18 22:00
這個不太好弄,因為有必要更新的post表,量往往很大,重寫難度高。
可以考慮自制一個腳本將總樓層數非常 ...

我看了下,我大概錯誤的地方只有幾頁,是不是我升級完X3.5后我查出forum_post表
每一個tid相同的,將position改成1起頭按順序就可以,沒再牽涉到其他表對嗎?
作者: cordless    時間: 2023-2-19 01:51
專家 發表于 2023-2-18 22:00
這個不太好弄,因為有必要更新的post表,量往往很大,重寫難度高。
可以考慮自制一個腳本將總樓層數非常 ...

我還看到forum_thread 也有一個maxposition也要改.
作者: stonys    時間: 2023-2-19 09:16
本帖最后由 stonys 于 2023-2-19 16:31 編輯
專家 發表于 2023-2-18 22:00
這個不太好弄,因為有必要更新的post表,量往往很大,重寫難度高。
可以考慮自制一個腳本將總樓層數非常 ...

用百度了下。
1、重算生成postions表。
  1. create table positions
  2. select
  3.   -- rownum  判斷  @pre_tid是否和當前的tid一樣 ,true:讓 @i+=1 false:重置@i
  4.   (
  5.     @i := case
  6.       when @pre_tid = tid then @i + 1
  7.       else 1
  8.     end
  9.   ) rownum,
  10.   b.pid,b.tid,b.position,
  11.   --  設置 @pre_tid等于上一個 tid
  12.   (@pre_tid := tid)
  13. from
  14.   `pre_forum_post` as b,
  15.   (
  16.     SELECT
  17.       @i := 0,
  18.       @pre_tid := ''
  19.   ) AS a
  20. group by
  21.   tid,dateline
  22. order by
  23.   tid,dateline;
復制代碼
2、更新post表的postion字段
  1. update `pre_forum_post` a,
  2. positions b
  3. set
  4.   a.position = b.rownum
  5. where
  6.   a.pid = b.pid
復制代碼
不知道有沒有問題。
處理后,似乎沒什么變化。論壇依然CPU占用較高。
由3.4升級3.5后,CPU占用高這個問題一直沒找到原因。

之前3.x的innodb方案非常好用,性能很高。

作者: 數碼達人    時間: 2023-2-19 10:00
stonys 發表于 2023-2-17 08:47
使用過3.4 的innodb方案。
Discuz! X2.5/X3-X3.4  InnoDB數據庫補丁 beta1.0.8 【2017.8.1更新】
https:/ ...

我也用了InnoDB數據庫補丁,看來還不敢升級X3.5
作者: stonys    時間: 2023-2-19 11:14
數碼達人 發表于 2023-2-19 10:00
我也用了InnoDB數據庫補丁,看來還不敢升級X3.5

之前的innoDB性能非常高,
3.4時我的服務器CPU是1核,平時負載非常低,CPU30%以下,
升級到3.5后的負載超高,都在100%左右。
后面沒辦法又花錢將CPU加到2核,負載依然很高,平時CPU在50-70%,也經常CPU到100%報警。

不清楚是不是3.5的性能問題,一直沒找到原因。
作者: 專家    時間: 2023-2-19 15:28
stonys 發表于 2023-2-19 11:14
之前的innoDB性能非常高,
3.4時我的服務器CPU是1核,平時負載非常低,CPU30%以下,
升級到3.5后的負載超 ...

x3.4 innodb框架和3.5的主要區別在回帖這塊,如果你的站點不是高頻回帖場景占比很大的話,一般不至于。
有條件的話可以嘗試短暫禁用回帖功能,觀察CPU是否有明顯的下降。

另外3.5這套方案早在測試階段就給過超大型站點用過的,現在內置的是根據反饋做了優化后的版本,按理說應該可以才對。

看帖這塊3.4 3.5邏輯都是一樣的,重定position值優化的是看帖,理論上對3.4和3.5都有幫助,可以在查看階段走快速查詢。
你那邊重寫position以后,記得抽幾條數據檢查一下,position是否為當前帖子的樓層號。
另外forum_threaddisablepos這個表一定要清理下,凡是這個表里有數值的帖子都不走快速查詢。
作者: 專家    時間: 2023-2-19 15:31
cordless 發表于 2023-2-19 01:46
我看了下,我大概錯誤的地方只有幾頁,是不是我升級完X3.5后我查出forum_post表
每一個tid相同的,將positio ...

是這樣的。
作者: stonys    時間: 2023-2-19 16:16
專家 發表于 2023-2-19 15:28
x3.4 innodb框架和3.5的主要區別在回帖這塊,如果你的站點不是高頻回帖場景占比很大的話,一般不至于。
...

感謝解答。
論壇回帖人很少,不是高頻回帖場景。
又將thread表的maxposition重算修復了,之前的值都比較大,幾萬到幾十萬以上,不曉得是不是這個原因。
另外,pre_forum_threaddisablepos這個表有4000多條記錄,這個表的數據是自動生成的嗎?直接清理掉嗎 ?

作者: 專家    時間: 2023-2-19 16:17
stonys 發表于 2023-2-19 16:16
感謝解答。
論壇回帖人很少,不是高頻回帖場景。
又將thread表的maxposition重算修復了,之前的值都比較 ...

threaddisablepos 理論上可以直接清空表,在早期版本這就是個內存表,重啟一下服務器數據就沒了那種的。
當然不放心的話可以備份一下。
作者: stonys    時間: 2023-2-19 16:34
專家 發表于 2023-2-19 16:17
threaddisablepos 理論上可以直接清空表,在早期版本這就是個內存表,重啟一下服務器數據就沒了那種的。
...

謝謝,已經清空。
觀察兩天看下
作者: hopejyb    時間: 2023-2-19 21:23
cordless 發表于 2023-2-19 01:46
我看了下,我大概錯誤的地方只有幾頁,是不是我升級完X3.5后我查出forum_post表
每一個tid相同的,將positio ...

我遇到這個情況。

當時升級完之后,我發現異常,回復升級之前的主題,升級之前的帖子會顯示不出來,只有升級之后發的帖子,我檢查了post表,發現position默認是從0開始的,于是修改為1開始,并且手動修改了有問題的帖子的position的值,一切正常了。

以下是升級之前的主題:

select tid,pid,first,position from nb_forum_post where tid=2024807;
+---------+----------+-------+----------+
| tid     | pid      | first | position |
+---------+----------+-------+----------+
| 2024807 | 34659470 |     1 | 41358421 |
| 2024807 | 34659556 |     0 | 41358507 |
| 2024807 | 34659706 |     0 | 41358657 |
| 2024807 | 34660591 |     0 | 41359542 |
| 2024807 | 34660729 |     0 | 41359680 |
| 2024807 | 34660731 |     0 | 41359682 |
| 2024807 | 34660738 |     0 | 41359689 |
+---------+----------+-------+----------+
7 rows in set (0.00 sec)


以下是升級之后發的主題:

select tid,pid,first,position from nb_forum_post where tid=2029587;
+---------+----------+-------+----------+
| tid     | pid      | first | position |
+---------+----------+-------+----------+
| 2029587 | 34746471 |     1 |        1 |
| 2029587 | 34746741 |     0 |        2 |
| 2029587 | 34746921 |     0 |        3 |
| 2029587 | 34747024 |     0 |        4 |
| 2029587 | 34747033 |     0 |        5 |
| 2029587 | 34747189 |     0 |        6 |
| 2029587 | 34747264 |     0 |        7 |
| 2029587 | 34748053 |     0 |        8 |
| 2029587 | 34748834 |     0 |        9 |
| 2029587 | 34749684 |     0 |       10 |
| 2029587 | 34749690 |     0 |       11 |
| 2029587 | 34750748 |     0 |       12 |
| 2029587 | 34750773 |     0 |       13 |
| 2029587 | 34753543 |     0 |       14 |
| 2029587 | 34755084 |     0 |       15 |
+---------+----------+-------+----------+
15 rows in set (0.01 sec)


作者: cordless    時間: 2023-2-19 22:04
hopejyb 發表于 2023-2-19 21:23
我遇到這個情況。

當時升級完之后,我發現異常,回復升級之前的主題,升級之前的帖子會顯示不出來,只有 ...

我已經試過手動修改forum_post符合3.5后把forum_post加入那五個不轉換的表中,就不讓升級程序幫我改就可以了,唯一要做的是最后取消AI再把樓層修改回來.
作者: 專家    時間: 2023-2-19 22:46
hopejyb 發表于 2023-2-19 21:23
我遇到這個情況。

當時升級完之后,我發現異常,回復升級之前的主題,升級之前的帖子會顯示不出來,只有 ...

官方版本的X3.5表里的position沒有默認值,不過這個應該影響不大。
作者: cordless    時間: 2023-3-2 01:38
專家 發表于 2023-2-19 22:46
官方版本的X3.5表里的position沒有默認值,不過這個應該影響不大。

用修改后的update正常升級到x3.5了,
也把position修改好,看起來都正常了,
謝謝你的解說.
作者: cordless    時間: 2023-3-6 18:41
本帖最后由 cordless 于 2023-3-6 18:59 編輯
專家 發表于 2023-2-19 22:46
官方版本的X3.5表里的position沒有默認值,不過這個應該影響不大。

我的forum_post都修正了,現在正在想辦法修正forum_thread的maxposition.
發現到有3000多筆要修正,我的好像都是1.
0的只有幾個都已修正,想問一下這個欄位錯誤到底有沒有問題?
會參考到這個欄位嗎?還是有回覆時會自動修正?
作者: cordless    時間: 2023-3-6 19:56
專家 發表于 2023-2-19 22:46
官方版本的X3.5表里的position沒有默認值,不過這個應該影響不大。

結果三搞兩搞全部修正完畢了.
作者: 專家    時間: 2023-3-7 16:11
cordless 發表于 2023-3-6 18:41
我的forum_post都修正了,現在正在想辦法修正forum_thread的maxposition.
發現到有3000多筆要修正,我的好像 ...

看了下代碼里的實現,這個值似乎是自動更新的。不過改了也好。




歡迎光臨 Discuz! 官方交流社區 (http://www.9999xn.com/) Powered by Discuz! W1.0