日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

程序出Bug,一定是环境的锅!

發(fā)布時(shí)間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序出Bug,一定是环境的锅! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

現(xiàn)象

前幾天,一個(gè)客戶反映說(shuō),他看到的數(shù)據(jù)順序是亂的,不是按照日期倒排。

但是在測(cè)試環(huán)境、預(yù)生產(chǎn)環(huán)境,都無(wú)法重現(xiàn)問題,即使使用相同的程序版本。

定位

查看代碼,出問題的功能使用了第三方ORM框架,無(wú)法看到實(shí)際執(zhí)行的SQL。

于是,使用SQL Server Profiler(正式服務(wù)器沒有權(quán)限安裝軟件,只能在測(cè)試環(huán)境使用)跟蹤定位到具體的SQL,拿到正式服務(wù)器上運(yùn)行。問題重現(xiàn)了。

由于數(shù)據(jù)需要分頁(yè)顯示,于是ORM框架實(shí)際使用了ROW_NUMBER實(shí)現(xiàn):

SELECT?TOP?(20)?T.ROW_NUMBER_0,T.xxx?FROM?(SELECT?xxx,ROW_NUMBER()?OVER(ORDER?BY?DateField?DESC)?AS?[ROW_NUMBER_0]? FROM?A??WHERE?xxx)?AS?[T]?WHERE?[T].[ROW_NUMBER_0]?>?0

而造成問題的原因就在于,返回的結(jié)果不是按ROW_NUMBER_0排序的。

分析

查看微軟官方文檔,沒有說(shuō)明要指定排序:

對(duì)結(jié)果集的輸出進(jìn)行編號(hào)。具體來(lái)說(shuō),返回結(jié)果集分區(qū)內(nèi)行的序列號(hào),每個(gè)分區(qū)的第一行從 1 開始。

看它的意思,返回的編號(hào)應(yīng)該是排序好的。

而且,它自己給的示例也是不指定排序的?

這就造成ORM框架實(shí)現(xiàn)時(shí)沒有考慮要指定排序。

結(jié)論

解決方案也很簡(jiǎn)單:指定按RowNumber排序。

后來(lái)檢查發(fā)現(xiàn),前方是Microsoft SQL Server 2012 (SP1),而測(cè)試環(huán)境用的是Microsoft SQL Server 2014。同樣的SQL,運(yùn)行效果不一樣。GOOGLE了一下,也沒發(fā)現(xiàn)有相關(guān)Bug的內(nèi)容。

順便測(cè)試了一下EF CORE,它是用OFFSET @P_0 ROWS FETCH NEXT @P_1 ROWS ONLY方式實(shí)現(xiàn)的分頁(yè),應(yīng)該不會(huì)再有這個(gè)問題了。

最后,提醒大家趕快把測(cè)試和生產(chǎn)環(huán)境配置統(tǒng)一,避免踩和我同樣的坑!

歡迎關(guān)注我的個(gè)人公眾號(hào)”My IO“

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的程序出Bug,一定是环境的锅!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。