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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

現象

前幾天,一個客戶反映說,他看到的數據順序是亂的,不是按照日期倒排。

但是在測試環境、預生產環境,都無法重現問題,即使使用相同的程序版本。

定位

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

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

由于數據需要分頁顯示,于是ORM框架實際使用了ROW_NUMBER實現:

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

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

分析

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

對結果集的輸出進行編號。具體來說,返回結果集分區內行的序列號,每個分區的第一行從 1 開始。

看它的意思,返回的編號應該是排序好的。

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

這就造成ORM框架實現時沒有考慮要指定排序。

結論

解決方案也很簡單:指定按RowNumber排序。

后來檢查發現,前方是Microsoft SQL Server 2012 (SP1),而測試環境用的是Microsoft SQL Server 2014。同樣的SQL,運行效果不一樣。GOOGLE了一下,也沒發現有相關Bug的內容。

順便測試了一下EF CORE,它是用OFFSET @P_0 ROWS FETCH NEXT @P_1 ROWS ONLY方式實現的分頁,應該不會再有這個問題了。

最后,提醒大家趕快把測試和生產環境配置統一,避免踩和我同樣的坑!

歡迎關注我的個人公眾號”My IO“

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。