Microsoft MVP성태의 닷넷 이야기
Sybase Adaptive Server Anywhere 6 버전에 대한 질문입니다. [링크 복사], [링크+제목 복사]
조회: 5016
글쓴 사람
heygongc (heygongc at naver.com)
홈페이지
첨부 파일
 
안녕하세요.

현재 Sybase Adaptive Server Anywhere 6버전인 디비를 C#(.Net 2.0) 으로 사용해야하는 상황입니다.

각 클라이언트 PC에 ODBC를 설정해두고

connectionString = "Dsn=dsn명;uid=아이디;pwd=비번";

OdbcConnection을 사용하여 데이터를 불러오고 있습니다.

그러나 클라이언트 PC에서 데이터를 불러올 때 OdbcDataAdapter.Fill(dt)로 데이터 테이블에 채우는 과정에서

60개의 행밖에 안되는 테이블을 조회하는데도 1, 2초 이상이 걸립니다.

그러나 java, vb6.0, 델파이에서는 같은 odbc 설정을 가지고 조회를 하면

상대적으로 즉각적인 속도를 보입니다.

1, 2초 정도이지만 프로그램 실행 시 여러 설정값들을 디비에서 반복하여 불러오다 보니 속도차이가 굉장히 많이 납니다.

iAnywhere.Data.SQLAnywhere.dll을 사용하여 연결하자니 Sybase 6버전에서는 사용이 안되는 듯 하고

ODBC 말고는 따로 연결할 수 있는 방법이 없는 듯하여 애를 먹고 있습니다.

1. 혹시 Sybase6버전에 대한 ODBC 설정과 닷넷이 최적화 되어 있지 않아서 다른 언어와 다르게 속도가 유독 떨어질 수 있을까요..?

2. ODBC의 속도 해결이 안된다면 Sybase6 버전을 ODBC가 아닌 다른 방법으로 연결할 수 있는 방법이 있을까요?

조금 글이 길어졌는데 읽어주셔서 감사합니다.








[최초 등록일: ]
[최종 수정일: 5/21/2018]


비밀번호

댓글 작성자
 



2018-05-22 11시42분
1번은 가능성이 있지만 구체적인 것은 Sybase 측의 포럼들을 이용해 문의하는 것이 좋습니다.

2번은 글쎄요, ODBC에서 속도 해결이 안되고 .NET Provider가 Sybase 6을 지원하지 않는다면 어떤 방법이 있을지... 혹시 OLEDB 층의 드라이버를 제공한다면 그걸 사용해 보는 정도가 아닐까 싶은데요.

그런데, 구체적으로 어디서 느린지 한번 확인해 보세요. 어차피 Fill은 Select 구문 수행하고 DateReader로부터 while문으로 루프 돌면서 한 행씩 데이터를 읽어오는 기능을 묶은 것에 불과합니다. 따라서 Fill 대신 해당 과정을 SELCT/DataReader로 직접 실행해 어느 지점에서 느린지 확인이 필요합니다.
정성태
2018-05-23 09시16분
[heygongc] 일단은 말씀해주신 것처럼 DataReader를 사용하여 직접 datatable에 데이터를 채워보았습니다.

테스트 해본 코드는 아래와 같으며 결과로는

open() 시간 : 0.069 초
datatable에 컬럼을 만드는 시간 : 0초
datatable에 행을 추가하는 시간 : 3.593초

해당 테이블의 컬럼수 : 11개
해당 테이블의 로우수 : 73개

입니다. 이 결과 자체로는 의심해볼 수 있는 부분이 있을까요?

string sql = "Select * From TestTable";
string OdbcConnectionString = "Dsn=testDsn;uid=test;pwd=test";

using (DataTable dt = new DataTable())
using (OdbcConnection conn = new OdbcConnection(OdbcConnectionString))
using (OdbcCommand cmd = new OdbcCommand(sql, conn))
{
    Stopwatch sw = new Stopwatch();
    sw.Reset();
    sw.Start();

    conn.Open();

    sw.Stop();
    textBox1.Text += "Open : " + sw.ElapsedMilliseconds / 1000.0F + Environment.NewLine;

    using (OdbcDataReader reader = cmd.ExecuteReader())
    {
        string colName;

        sw.Reset();
        sw.Start();

        for (int i = 0; i < reader.FieldCount; i++)
        {
            colName = reader.GetName(i);

            if (!dt.Columns.Contains(colName))
            {
                dt.Columns.Add(colName, typeof(string));
            }
        }

        sw.Stop();
        textBox1.Text += "Fill Columns : " + sw.ElapsedMilliseconds / 1000.0F + Environment.NewLine;

        string[] row = new string[reader.FieldCount];


        sw.Reset();
        sw.Start();

        while (reader.Read())
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                row[i] = reader[i].ToString();
            }
            dt.Rows.Add(row);
        }

        sw.Stop();
        textBox1.Text += "While() : " + sw.ElapsedMilliseconds / 1000.0F + Environment.NewLine;
        
        dataGridView1.DataSource = dt;
    }
}
[손님]
2018-05-23 10시08분
다른 코드는 다 떼어내고, 그러니까 정리하면 다음의 코드에서 느린거죠?

while (reader.Read())
{
    for (int i = 0; i < reader.FieldCount; i++)
    {
        reader[i].ToString();
    }
}
정성태
2018-05-23 11시59분
[guest] 네 그렇습니다
[손님]
2018-05-23 01시50분
혹시, 그럼 Java/VB6.0으로 했을 때는 빠르다고 했는데 C#으로 했을 때와 정확히 동일한 SQL 쿼리임에도 그런 속도차이가 나는 건가요?
정성태
2020-11-05 11시18분
[q] 오래 되었습니다만
당시에 클러이언트 PC에 ODBC를 Sybase 6버전이 아닌 12버전으로 설치해서 사용하니
속도 문제가 해결되었습니다.
[손님]
2020-11-05 12시24분
정리해 보면, Sybase 6 버전에서 Java, VB6, 델파이는 괜찮았지만 닷넷만 느렸다는 건가요?
정성태
2021-04-05 03시47분
[손님] 상황을 정리해보면 서버에 Sybase Adaptive Server Anywhere 6.0 버전이 설치가 되어 있습니다.
클라이언트에서 접속할 때 클라이언트 PC에 ODBC 드라이버를 서버와 동일하게 Adaptive Server Anywhere 6.0 버전으로 설치 후 접근하면
자바, VB 6.0에서는 속도가 이슈가 없었지만 닷넷에서는 속도가 현저히 떨어졌습니다.

그러나 서버에는 여전히 Sybase Adaptive Server Anywhere 6.0 를 유지한채
클라이언트 PC에는 SQL Anywhere 12 버전의 ODBC 드라이버를 설치하여 접근하니
닷넷에서도 속도가 해결되었습니다.
그리고 서버에 설치된 DBMS는 Sybase 6버전이지만 ODBC 드라이버는 12 임에도 하위버전 호환이 되어서인지
현재까지 호환성의 문제는 없었습니다.
[손님]
2021-04-05 04시18분
경험 공유 감사합니다. (이렇게 정리하는 것도 시간이 은근 소비되었을 텐데... 수고 많으셨습니다. ^^)
정성태

... 16  17  18  19  20  21  22  23  24  25  26  27  [28]  29  30  ...
NoWriterDateCnt.TitleFile(s)
4908필승11/1/20178213특정 시각에 프로그램 종료 또는 재시작시 오류 발생 [8]
4907심너울10/29/20175507선생님이 쓰신 "시작하세요! C# 7.1~"으로 공부하고 있는데요~ [2]
4906손님10/25/20175222.net core, .net standard 관련해서 궁금합니다 [2]
490510/25/20174861watermark 관련문의 [1]
4903Ho10/25/20175068간단한 서버를 구현해 보고 싶습니다. [2]
4902황재승10/22/20175912C# 7.1 프로그래밍 왕초보자도 이해할 수 있는 수준인가요? [1]
4901김레오10/17/20179986c# 프로그램 난독화 도구인 confuserex라는 도구를 사용하다 여쭙습니다. [2]
4900황준범10/12/20175858ClickOnce 배포관련 질문드립니다. [1]
4899Question9/28/20178395C# 프로그램이 "응답 없음" 시에도 계속 독립적으로 돌아가는 타이머 생성법 [3]
4898ssdrm9/27/20175640Clickonce 실행시 보안에 막힙니다 ㅠ [1]
4897김태진9/23/20175634윈도우7 작업관리자의 상세(details)탭 생성에 대해 여쭙습니다. [1]
4896장진국9/19/20176385안녕하세요 WPF 에서 Window객체가 가비지 콜렉션에 의해 수집되지 않는거 같아서 문의드립니다. [1]
4895Question9/18/20176136Generic 에 관하여 질문드립니다. [5]
4894얼마전6.0구매자9/14/20177072C# 7.1에서 보강된 부분만 PDF로 제공하는 건 아니되나요? [2]
4893BigII9/14/20176586타 언어(JAVA, PHP 등)에서 받은 RSA 개인키 문자열을 이용하여 내용 복호화 가능 여부 [4]
4892Question9/13/20176405서브 폼에서는 무거운 작업을해도 속도가 빠를까요 ?? [1]
4891윤현수9/11/20176566Taskbar에 관한 질문입니다. [5]
4890제발9/11/20175731 시작하세요! C# 6.0 프로그래밍 책이 절판됐나요? [5]파일 다운로드1
4889낙낙이9/7/20175363안녕하세요! xsl관련 이야기입니다. [1]
4888heyhey9/6/20175223클릭원스를 수동으로 배포 시 업데이트 할 때 [1]
4887이경현9/4/20175645Windows server 2012 파일 없어짐 현상... [1]
4886질문자9/1/20177456disconnecteditem에 대하여 아시나요? [4]파일 다운로드1
4883솔솔8/30/20175385dataview에서 select한 index 가져오기 [1]
4882user8/30/20177742UI 변경 작업 여러개를 동시에 사용하려면 어떻게 해야되나요 ?? [7]
4884user8/31/20175125    답변글 [답변]: UI 변경 작업 여러개를 동시에 사용하려면 어떻게 해야되나요 ??파일 다운로드1
4881kmi8/30/20175495진행속도가 중간에 더뎌지는 문제가 있는데 해결할 수 있는 방법이 있나 궁금합니다. [3]
... 16  17  18  19  20  21  22  23  24  25  26  27  [28]  29  30  ...