Microsoft MVP성태의 닷넷 이야기
Sybase Adaptive Server Anywhere 6 버전에 대한 질문입니다. [링크 복사], [링크+제목 복사]
조회: 9047
글쓴 사람
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;
    }
}
[guest]
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] 네 그렇습니다
[guest]
2018-05-23 01시50분
혹시, 그럼 Java/VB6.0으로 했을 때는 빠르다고 했는데 C#으로 했을 때와 정확히 동일한 SQL 쿼리임에도 그런 속도차이가 나는 건가요?
정성태
2020-11-05 11시18분
[q] 오래 되었습니다만
당시에 클러이언트 PC에 ODBC를 Sybase 6버전이 아닌 12버전으로 설치해서 사용하니
속도 문제가 해결되었습니다.
[guest]
2020-11-05 12시24분
정리해 보면, Sybase 6 버전에서 Java, VB6, 델파이는 괜찮았지만 닷넷만 느렸다는 건가요?
정성태
2021-04-05 03시47분
[guest] 상황을 정리해보면 서버에 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 임에도 하위버전 호환이 되어서인지
현재까지 호환성의 문제는 없었습니다.
[guest]
2021-04-05 04시18분
경험 공유 감사합니다. (이렇게 정리하는 것도 시간이 은근 소비되었을 텐데... 수고 많으셨습니다. ^^)
정성태

... 16  17  18  19  20  21  [22]  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5372민성8/24/20207617안녕하세요 WPF 웹브라우저 컨트롤에서 웹브라우저 자체를 엣지로 할 수가 있나요? [2]
5371서현준8/11/20206625Hyper-V 내부 네트워크 환경 중, VM 에서 인터넷 접속 [1]
5370독자8/11/20205673.net createobject 관련 질문입니다.. [4]
5369독자8/10/20206003c# 8.0 프로그래밍 책에 대한 질문 드립니다 [1]
5368guest8/10/20207289시작하세요! C# 8.0 프로그래밍 책에 오타가 있습니다. [1]
5367박순기8/8/20206206디버깅 시 반전되는 부분 글 색상이나 배경색을 변경하는 방법 [3]파일 다운로드1
5366간절함8/7/20206900하나의 솔루션에서, 32비트 프로젝트에서 다른 64비트 프로젝트 참조하는 방법 궁금합니다. [4]
5365영귤8/6/20206146TimeSpan 구할 때 시간대를 바꿔도 같은 값이 나오는 것 같습니다. [1]
5364박순기8/5/20206195visual studio의 menu bar font size 변경방법 문의 [2]파일 다운로드1
5363클락8/1/20206815c# 9.0 출간 준비 중이신가요? [2]
5361하태7/29/20206433안녕하세요! 바이너리데이터 파싱 질문 드리겠습니다!. [2]
5360진우7/28/20207401엑셀에서 발생하는 모든 이벤트를 감지 할수 있는지 궁금합니다. [6]파일 다운로드1
5358홍길동7/22/20206143개체에서 open 속성이나 매서드가 지원 되지 않읍니다.라고 오류창이 뜨는데. [1]
5357손동섭7/22/20206249책 예제코드... [3]
5355neska7/21/20206629안녕하세요 문의 드립니다 [1]
5354민성7/15/20208099안녕하세요 db연결 문자 보안 [2]
5353형성재7/14/20207126Visual Studio Setup Project에서 VC++2010재배포패키지설치 [4]
5352윤식7/10/20207103닷넷코어 빌드 시 runtimeconfig 파일을 없앨 수 있는지.. [4]
5351runr...7/2/20206942C# 에서 C++ dll 병렬 사용 [1]
5350홍성호6/29/20208557C++에서 정의된 구조체(공유메모리)를 C#으로 공유메모리에서 구조체 변환시 에러가 발생 합니다. [1]파일 다운로드1
5349jero...6/24/20206076logon credential provider 관련 문의드립니다. [1]
5348776/19/20205819시작하세요 C# 8.0프로그래밍 책에 대한 질문입니다. [8]
5347민성6/19/20206623안녕하세요 WPF Binding에서요 [1]
5346dimo...6/18/20206673Task.WhenAll() 메소드를 이용한 코드를 좀더 짧게 사용하고 싶은데 다른 표현이 있을까요? [3]
5345질문요6/12/20205781idc vs 집 속도 [2]
5344하태6/2/20206911c++ .ilb에서 c# dll 호출 질문 드리겠습니다 (콜백함수 전달) [4]
... 16  17  18  19  20  21  [22]  23  24  25  26  27  28  29  30  ...